Java中字符串连接符(+)和append的区别

参考链接:https://www.jianshu.com/p/849f1d443b3a

文章结构:

  第一部分:对+的原理进行分析

  第二部分:+ 和 append 循环对比(贴出代码,以及分别循环后的反编译字节码,来对两者进行对比)

一: + 底层原理解析(+ 的底层是new StringBuilder 进行append)

1 String str1 = "hello";
2 String str2 = str1 + " coisini";
3 System.out.println(str2);

底层,其实在每一次 + 之前 都会new 一个StringBuilder对象,所以效率低,

上述代码,会被编译器按照如下顺序执行

  (使用javap -c 命令查看指令集,参考文章:https://www.cnblogs.com/coisini/p/9779283.html)

具体指令详解参考上一篇

https://www.cnblogs.com/coisini/p/9789412.html

二: + 和 append 循环对比 

  1):+ 号循环

1  long start = System.currentTimeMillis();
2 String str1 = "hello";
3 for(int i=0; i <10000000; i++){
4      String str2 = str1 + " coisini";
5 }
6 long end = System.currentTimeMillis();
7 System.out.println("开始-结束时间差"+(end-start));

 

循环次数少,用 + 和append 结果没差,为了对比结果,所以我循环次数多一点,这里没考虑堆栈溢出的问题,看,用了2.34秒

看一下反编译的字节码

  2)append做循环

long start = System.currentTimeMillis();
String str1 = "hello";
StringBuilder builder= new StringBuilder();
for(int i=0; i <10000000; i++){
      builder.append("coisni");
}
long end = System.currentTimeMillis();
System.out.println("开始-结束时间差"+(end-start));

 

反编译字节码,发现没,根本没有新创建对象

总结

 1): +的原理,每遇到一个+,就new StringBuilder然后用append

 2):性能,字符串拼接少,两者均可,拼接次数多,用append

生怕自己少截个图,会给阅读者,阅读造成麻烦,所以就啰嗦了点...

转载于:https://www.cnblogs.com/coisini/p/9778892.html

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值