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

String mango = "mango";

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

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

 System.out.println(s);

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

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());

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

QQ截图20170226011553.png

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一、字符串在C#中,字符串是一系列不可修改的Unicode字符,创建字符串后,就不能修改它。要创建字符串,最常用的...
    CarlDonitz阅读 5,075评论 0 2
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 32,143评论 18 399
  • 转自:http://blog.csdn.net/jackfrued/article/details/4492194...
    王帅199207阅读 12,753评论 3 93
  • 集合框架: 1)特点:存储对象;长度可变;存储对象的类型可不同2)Collection(1)List:有序的;元素...
    Demo_Yang阅读 5,071评论 0 4
  • 考虑一件事情就是,是否言行不一会影响身体健康。也是否会长久。 如果答案是yes,那么我一个想法就是以不变应万变。保...
    夏胤大帝阅读 1,105评论 0 0