专栏首页用户5521492的专栏字符串拼接,什么时候会走 StringBuilder?

字符串拼接,什么时候会走 StringBuilder?

作者:叫我不矜持 来源:http://h5ip.cn/gz72

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

1、案例 1

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

2、案例 2

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

3、探究问题

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

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

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

4、总结

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

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

本文分享自微信公众号 - 一个优秀的废人(feiren_java),作者:一个优秀的废人

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-09-10

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Java 中检查空字符串(null或空白)的方法有几种?

    来源:https://www.toutiao.com/i6713087515768652301

    一个优秀的废人
  • 聊聊 Python 字符串连接的七种方式

    我是狗哥,一名程序猿。做过 Android、撸过 Java、目前在自学 Python 。注册 「一个优秀的废人」这个公号已有些日子,真正有心将它运营起来是这两天...

    一个优秀的废人
  • 知乎高赞:本科生如何才能进入 BAT 等一流互联网大厂?

    链接 | zhihu.com/question/26406260/answer/186461717

    一个优秀的废人
  • 为什么不建议在for循环中使用"+"进行字符串拼接

    字符串,是Java中最常用的一个数据类型了。关于字符串的知识,作者已经发表过几篇文章介绍过很多,如:

    Fundebug
  • 数据库连接对象的使用

    Woodson
  • 31:字符串p型编码

    31:字符串p型编码 总时间限制: 1000ms 内存限制: 65536kB描述 给定一个完全由数字字符('0','1','2',…,'9')构成的字符串s...

    attack
  • 破解某单机游戏到学习fiddler脚本改包

    前段日子出去玩了,游山玩水的,网太差,就下了个单机耍耍。水墨风,打斗效果挺不错的(那么,请问哪里能够下载到呢?)

    Deen_
  • 几行代码构建全功能的对象检测模型,他是如何做到的?

    如今,机器学习和计算机视觉已成为一种热潮。我们都看过关于自动驾驶汽车和面部识别的新闻,可能会想象建立自己的计算机视觉模型有多酷。然而,进入这个领域并不总是那么容...

    CV君
  • 几行代码构建全功能的对象检测模型,他是如何做到的?

    如今,机器学习和计算机视觉已成为一种热潮。我们都看过关于自动驾驶汽车和面部识别的新闻,可能会想象建立自己的计算机视觉模型有多酷。然而,进入这个领域并不总是那么容...

    AI科技大本营
  • JavaScript第十三弹——ES6(二)字符串的扩展

    Hello小可爱们,还记得昨天的let、const吗?还记得块级作用域吗?还记得解构赋值吗?今天我们要接着往下介绍咯!这几次分享是扩展大礼包哟~

    萌兔IT

扫码关注云+社区

领取腾讯云代金券