您的位置 首页 java

String 字符串拼接问题,到底什么时候会走 StringBuilder?

最近在突然想到了String 字符串 拼接问题,于是做了一个demo测试了一下,到底String类型的字符串在拼接的时候,哪种情况下会走会走StringBulider进行字符串拼接,而哪种情况编译器会对代码进行优化?话不多说,先看demo

问题

案例1

可以发现,str == str2的结果为false,那么我们在看看下一个例子。

案例2

这时候,两个字符串对比的结果为true。

探究问题

这时候,疑问就来了,为什么结果会不一致呢?利用在cmd窗口输入 Java p-cTestDemo.class命令,对字节码文件进行 反编译 ,发现了问题所在?

可以看到在案例1中,java代码底层走了StringBuilder,进行字符串拼接,然后调用了StringBuilder的 toString 方法。

而案例2中,对 class文件 进行反编译,发现代码出现了一点变化,并没有走StringBuilder进行字符串拼接。

总结

  1. 案例1中 ,通过变量和字符串拼接,java是需要先到内存找变量对应的值,才能进行完成字符串拼接的工作,这种方式java编译器没法优化,只能走 StringBuilder进行拼接字符串,然后调用toString方法,当然返回的结果和常量池中的 111这个字符串的内存地址是 不一样 的,因此结果为false。
  2. 案例2中 ,直接在表达式里写值,java不用根据变量去内存里找对应的值,可以在编译的时候直接对这个表达式进行优化,优化后的表达式从 “111”+”” 直接变成了 “111” ,两个String类型的变量都指向了常量池的111字符串,因此结果为true;

我自己是一名从事了多年开发的Java老程序员,辞职目前在做自己的Java私人定制课程,今年年初我花了一个月整理了一份最适合2019年学习的Java学习干货,从最基础的JavaSE到Spring各种框架都有整理,送给每一位Java小伙伴,想要获取的可以关注我的头条号并在后台私信我:Java,即可免费获取。

文章来源:智云一二三科技

文章标题:String 字符串拼接问题,到底什么时候会走 StringBuilder?

文章地址:https://www.zhihuclub.com/186064.shtml

关于作者: 智云科技

热门文章

网站地图