登陆

章鱼彩票最新公告-String 字符串拼接问题,究竟什么时候会走 StringBuilder?

admin 2020-02-14 242人围观 ,发现0个评论

最近在忽然想到了String字符串拼接问题,所以做了一个demo测试了一下,究竟String类型的字符串在拼接的时分,哪种状况下会走会走StringBulider进行字符串拼接,而哪种状况编译器会对代码进行优化?话不多说,先看demo

问题

事例1

能够发现,str == str2的成果为false,那么咱们在看看下一个比如。

事例2

这时分,两个字符串比照的成果为true。

探求问题

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

能够看到在事例1中,java代码底层走了StringBuilder,进行字符串拼接,然后调用了StringBuil章鱼彩票最新公告-String 字符串拼接问题,究竟什么时候会走 StringBuilder?der的toString办法。

而事例2中,对cl高密度脂蛋白ass文件进行反编译,发现代码呈现了一点改变,并没有走StringBuilder进行字符串拼接。

总结

  1. 事例1中,经过变量和字符串拼接,java是需求先到内存找变量对应的值,才干进行完结字符串拼接章鱼彩票最新公告-String 字符串拼接问题,究竟什么时候会走 StringBuilder?的作业,这种办法java编译器无法优化,只能走 StringBuilder进行拼接字符串,然后调用toString办法,当然回来的成果和常量池中的 111这个字符串的内存地址是不一样的,因而成果为false。
  2. 事例2中,直接在表达式里写值,java不必依据变量去内存里找对应的值,能够在编译的时分直接对这个表达式进行优化,优化后的表达式从 "111"+"" 直接变成了 "111" ,两个String类型章鱼彩票最新公告-String 字符串拼接问题,究竟什么时候会走 StringBuilder?的变量都指向了常量池的111字符串,因而成果为true;
请关注微信公众号
微信二维码
不容错过
Powered By Z-BlogPHP