字符串拼接,会走StringBuilder 吗?

沙海 2021年4月13日12:52:47杂谈 Java评论96字数 1203阅读4分0秒阅读模式
摘要

速读摘要

速读摘要文章源自JAVA秀-https://www.javaxiu.com/11508.html

发现,str==str2的结果为false,那么我们在看看下一个例子。利用在cmd窗口输入javap-c TestDemo.class命令,对字节码文件进行反编译,发现了问题所在?文章源自JAVA秀-https://www.javaxiu.com/11508.html

原文约 844 | 图片 4 | 建议阅读 2 分钟 | 评价反馈文章源自JAVA秀-https://www.javaxiu.com/11508.html

字符串拼接,会走StringBuilder 吗?

架构师专栏 文章源自JAVA秀-https://www.javaxiu.com/11508.html

大家好,我是磊哥。文章源自JAVA秀-https://www.javaxiu.com/11508.html

最近在突然想到了String字符串拼接问题,于是做了一个demo测试了一下,到底String类型的字符串在拼接的时候,哪种情况下会走会走StringBulider进行字符串拼接,而哪种情况编译器会对代码进行优化?话不多说,先看demo文章源自JAVA秀-https://www.javaxiu.com/11508.html

一.问题

案例1

字符串拼接,会走StringBuilder 吗?文章源自JAVA秀-https://www.javaxiu.com/11508.html

可以发现,str == str2的结果为false,那么我们在看看下一个例子。文章源自JAVA秀-https://www.javaxiu.com/11508.html

案例2

字符串拼接,会走StringBuilder 吗?文章源自JAVA秀-https://www.javaxiu.com/11508.html

这时候,两个字符串对比的结果为true。文章源自JAVA秀-https://www.javaxiu.com/11508.html

二.探究问题

这时候,疑问就来了,为什么结果会不一致呢?利用在cmd窗口输入javap -c TestDemo.class命令,对字节码文件进行反编译,发现了问题所在?文章源自JAVA秀-https://www.javaxiu.com/11508.html

字符串拼接,会走StringBuilder 吗?文章源自JAVA秀-https://www.javaxiu.com/11508.html

可以看到在案例1中,java代码底层走了StringBuilder,进行字符串拼接,然后调用了StringBuilder的toString方法。文章源自JAVA秀-https://www.javaxiu.com/11508.html

字符串拼接,会走StringBuilder 吗?文章源自JAVA秀-https://www.javaxiu.com/11508.html

测试代码2cmd.png文章源自JAVA秀-https://www.javaxiu.com/11508.html

而案例2中,对class文件进行反编译,发现代码出现了一点变化,并没有走StringBuilder进行字符串拼接。文章源自JAVA秀-https://www.javaxiu.com/11508.html

三.总结

1、案例1中,通过变量和字符串拼接,java是需要先到内存找变量对应的值,才能进行完成字符串拼接的工作,这种方式java编译器没法优化,只能走StringBuilder进行拼接字符串,然后调用toString方法,当然返回的结果和常量池中的111这个字符串的内存地址是不一样的,因此结果为false。文章源自JAVA秀-https://www.javaxiu.com/11508.html

2、案例2中,直接在表达式里写值,java不用根据变量去内存里找对应的值,可以在编译的时候直接对这个表达式进行优化,优化后的表达式从 "111" + "" 直接变成了 "111" ,两个String类型的变量都指向了常量池的111字符串,因此结果为true;文章源自JAVA秀-https://www.javaxiu.com/11508.html

近期技术热文1、Java8 的 Stream 快速实现List转map 、分组2、面试官:String长度有限制吗?是多少?3、为什么牛逼的程序员都不用 “ ! = null " 做判空4、Java8 中用法优雅的 Stream,性能也"优雅"吗?第3版:互联网大厂面试题包括 Java 集合、JVM、多线程、并发编程、设计模式、算法调优、Spring全家桶、Java、MyBatis、ZooKeeper、Dubbo、Elasticsearch、Memcached、MongoDB、Redis、MySQL、RabbitMQ、Kafka、Linux、Netty、Tomcat、Python、HTML、CSS、Vue、React、JavaScript、Android 大数据、阿里巴巴等大厂面试题等、等技术栈!阅读原文: 高清 7701页大厂面试题  PDF
文章源自JAVA秀-https://www.javaxiu.com/11508.html

阅读原文文章源自JAVA秀-https://www.javaxiu.com/11508.html

继续阅读
速蛙云 - 极致体验,强烈推荐!!!购买套餐就免费送各大视频网站会员!快速稳定、独家福利社、流媒体稳定解锁!速度快,全球上网、视频、游戏加速、独立IP均支持!基础套餐性价比很高!这里不多说,我一直正在使用,推荐购买:https://www.javaxiu.com/59919.html
weinxin
资源分享QQ群
本站是JAVA秀团队的技术分享社区, 会经常分享资源和教程; 分享的时代, 请别再沉默!
沙海
匿名

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定