java中`+`和`+=`在字符串的重载和`StringBuilder`

String mango = "mango";

String s = "abc"+mango+"def"+47;

 s += "cdf0";
 s += "cdf1";

 System.out.println(s);

可以使用javac进行编译,然后用javap -c反编译。

java中`+`和`+=`在字符串的重载和`StringBuilder`_第1张图片
QQ截图20170226010437.png

经过这样操作可以发现:
编译器使用了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());

以上代码完成了同样的字符串连接。
反编译结果如下:

java中`+`和`+=`在字符串的重载和`StringBuilder`_第2张图片
QQ截图20170226011553.png

明显只创建了一个StringBuilder对象。

你可能感兴趣的:(java中`+`和`+=`在字符串的重载和`StringBuilder`)