You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JDK1.5+ String加号编译未优化为StringBuilder,反编译无变化问题咨询

你看不到优化痕迹的核心原因是反编译工具自动做了语法糖还原,把字节码里的StringBuilder拼接逻辑重新转换成了String +的写法,和原代码一致不代表编译期没有做优化。

验证优化确实存在的方法

  • 不要依赖反编译得到的Java代码,直接查看编译后class文件的字节码:执行命令javap -v 你的类名.class,即可在输出中看到String拼接对应的new StringBuilder、append、toString调用,和你预期的优化逻辑完全一致。
  • 如果一定要用反编译工具查看Java形式的优化结果,可以调整IDEA反编译的设置:关闭「将StringBuilder拼接还原为+运算符」的相关选项,反编译结果就会显示为StringBuilder调用的形式。

相关补充说明

  • 纯字面量的String拼接(比如你代码里的String str1 = "It's" + " a string" + "....";)会触发编译期常量折叠,编译器会直接把多个字面量合并为一个完整的字符串常量,不会生成StringBuilder相关逻辑,也不会在运行期做拼接操作,你可以通过str0 == str1得到true验证这一点。
  • Java 8及之前版本的编译器不会对循环内的String拼接做批量优化,每次循环都会创建新的StringBuilder对象,所以如果有循环内大量拼接字符串的场景,推荐手动创建单个StringBuilder复用,减少对象创建开销。

内容的提问来源于stack exchange,提问作者creep

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.09 16:39:01