String mango = "mango";
String s = "abc"+mango+"def"+47;
s += "cdf0";
s += "cdf1";
System.out.println(s);
可以使用javac进行编译,然后用javap -c反编译。
经过这样操作可以发现:
编译器使用了StringBuilder对象,用于连接字符串。
对于+
操作符,本质上是使用StringBuilder的append方法。
String s = "abc"+mango+"def"+47;
这段代码,只创建了一个StringBuilder
对象,用append方法完成了字符串连接。
s += "cdf0";
s += "cdf1";
上面两个表达式创建了两个StringBuilder
对象,因此可以知道,每重载一个+=
操作符,就会创建一个StringBuilder
对象。创建对象就会产生开销。
上面代码创建了三个StringBuilder
对象。
所以应当减少这两个操作符的重载,可以对性能产生微小的提升。
作为对比应该有明确使用StringBuilder
对象进行的字符串连接。
StringBuilder result = new StringBuilder();
String mango = "mango";
result.append("abc");
result.append(mango);
result.append("def");
result.append(47);
result.append("cdf0");
result.append("cdf1");
System.out.println(result.toString());
以上代码完成了同样的字符串连接。
反编译结果如下:
明显只创建了一个StringBuilder
对象。