java字符串拼接在什么时候走StringBuilder

发布时间:2022-01-15 13:56:02 作者:iii
来源:亿速云 阅读:107

这篇“java字符串拼接在什么时候走StringBuilder”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“java字符串拼接在什么时候走StringBuilder”文章吧。

一. 问题

案例 1

java字符串拼接在什么时候走StringBuilder

测试代码 1.png

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

案例 2

java字符串拼接在什么时候走StringBuilder

测试代码 2.png

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

二. 探究问题

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

java字符串拼接在什么时候走StringBuilder

测试代码 1cmd.png

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

java字符串拼接在什么时候走StringBuilder

测试代码 2cmd.png

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

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

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

以上就是关于“java字符串拼接在什么时候走StringBuilder”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注亿速云行业资讯频道。

推荐阅读:
  1. nginx认证走LDAP
  2. 走迷宫问题(待续)

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

java stringbuilder

上一篇:CDP私有云基础版7.1.6的新功能是什么呢

下一篇:springboot整合quartz定时任务框架的方法是什么

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》