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
生怕自己少截个图,会给阅读者,阅读造成麻烦,所以就啰嗦了点...
【推荐】中国电信天翼云云端翼购节,2核2G云服务器一口价38元/年
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 聊一聊 C#前台线程 如何阻塞程序退出
· 几种数据库优化技巧
· 聊一聊坑人的 C# MySql.Data SDK
· 使用 .NET Core 实现一个自定义日志记录器
· [杂谈]如何选择:Session 还是 JWT?
· 字节豆包,来园广告
· 我用cursor, 半就开发了一个手机壁纸小程序,真的太强了
· 聊一聊 C#前台线程 如何阻塞程序退出
· 订单超时自动取消,我们是这样做的。。。
· C#字符串拼接的几种方式及其性能分析对比