假设我在Java中有一个表达式,例如:
String s = "abc" + methodReturningAString() + "ghi" +
anotherMethodReturningAString() + "omn" + "blablabla";
Run Code Online (Sandbox Code Playgroud)
Java的默认JDK编译器的行为是什么?它只是制作五个连接还是有智能性能技巧?
我读到了Java使用+=运算符的方式StringBuilder.
操作是否相同("a" + "b")?
当我注意到有关字符串连接的这一点时,我正在查看StringJavadoc:
Java语言为字符串连接运算符(+)提供特殊支持,并为其他对象转换为字符串.
String通过StringBuilder(或StringBuffer)实现连接
从Java 8 JLS 15.8.1开始,它是编译器的选择(强调我的):
实现可以选择在一个步骤中执行转换和连接,以避免创建然后丢弃中间String对象.为了提高重复字符串连接的性能,Java编译器可以使用StringBuffer类或类似技术来减少通过计算表达式创建的中间String对象的数量.
我制作了一个小程序来查看它编写的内容
public class Tester {
public static void main(String[] args) {
System.out.println("hello");
for (int i = 1; i < 5; i++) {
String s = "hi " + i;
System.out.println(s);
}
String t = "me";
for (int i = 1; i < 5; i++) {
t += i;
System.out.println(t);
}
System.out.println(t);
}
}
Run Code Online (Sandbox Code Playgroud)
运行时的输出javap -c Tester显示StringBuilder正在使用的输出:
Compiled …Run Code Online (Sandbox Code Playgroud)