开箱即用,您有 3 种方法在您尝试实现时将变量的值注入 String:
1。最简单的方法
您可以在String 和任何对象或原始类型之间简单地使用运算符+,它会自动连接String 和
- 如果是对象,则
String.valueOf(obj)的值对应于String“null”如果obj是null,否则obj.toString()的值。
- 如果是原始类型,则相当于
String.valueOf(<primitive-type>)。
非 null 对象的示例:
Integer theNumber = 42;
System.out.println("Your number is " + theNumber + "!");
输出:
Your number is 42!
null 对象的示例:
Integer theNumber = null;
System.out.println("Your number is " + theNumber + "!");
输出:
Your number is null!
原始类型示例:
int theNumber = 42;
System.out.println("Your number is " + theNumber + "!");
输出:
Your number is 42!
2。显式方式,可能是最有效的方式
您可以使用StringBuilder(或StringBuffer 线程安全的过时对应项)使用append 方法构建您的String。
示例:
int theNumber = 42;
StringBuilder buffer = new StringBuilder()
.append("Your number is ").append(theNumber).append('!');
System.out.println(buffer.toString()); // or simply System.out.println(buffer)
输出:
Your number is 42!
在幕后,这实际上是最近的 java 编译器如何使用运算符 + 转换所有 String 连接,与以前的方式的唯一区别是您拥有 完全控制 .
确实,编译器将使用 默认构造函数 所以默认容量 (16) 因为他们不知道要构建的 String 的最终长度是多少,这意味着如果最终长度大于16,容量必然会扩大,在性能上是有代价的。
因此,如果您提前知道最终String 的大小将大于16,那么使用这种方法提供更好的初始容量会更有效。例如,在我们的示例中,我们创建了一个长度大于 16 的 String,因此为了获得更好的性能,应该将其重写为 next:
优化示例:
int theNumber = 42;
StringBuilder buffer = new StringBuilder(18)
.append("Your number is ").append(theNumber).append('!');
System.out.println(buffer)
输出:
Your number is 42!
3。最易读的方式
您可以使用String.format(locale, format, args) 或String.format(format, args) 方法,它们都依赖于Formatter 来构建您的String。这允许您通过使用将被参数值替换的占位符来指定最终String 的格式。
示例:
int theNumber = 42;
System.out.println(String.format("Your number is %d!", theNumber));
// Or if we need to print only we can use printf
System.out.printf("Your number is still %d with printf!%n", theNumber);
输出:
Your number is 42!
Your number is still 42 with printf!
这种方法最有趣的方面是我们清楚地知道最终的String 是什么,因为它更易于阅读,因此更易于维护。