jdk不同版本对String拼接的优化分析
2024-10-18 04:16:37
1. 测试demo代码
- 测试循环中字符串拼接优化
public class ForTest {
public static void main(String[] args) {
String a = "0";
for (int i = 1; i < 10; i++) {
a = a + "i";
}
System.out.println(a);
}
}
2. 测试循环中字符串拼接优化
jdk5
jdk6
jdk7
jdk8
结论:
- 对比jdk5-8所有版本下的反编译字节码,发现结果相同,证明字符串拼接从jdk5开始就已经完成了优化,并且没有进行新的优化。
- 详细看反编译后的字节码,8开始进入for循环比较阶段,11new一个新的StringBuilder,为了优化之后的String+操作。34循环结束,重新到5,将会在11重新new一个StringBuilder。
- 循环外字符串拼接可以直接使用String的+操作,没有必要通过StringBuilder进行append.
- 由于循环中每次都会回到5,所以会不停的创建StringBuilder对象,除了循环体后就成了无效对象,这样会产生大量的垃圾对象。所以好的做法是在循环外声明StringBuilder对象,在循环内进行手动append。不论循环多少层都只有一个StringBuilder对象。
最新文章
- IOS开发基础知识--碎片16
- py2exe 打包scipy时遇到的问题
- qml android 的一个例子qtHangMan
- VC++代码的汇编分析(一)
- Android性能测试工具 Emmagee
- [译]C++如何切分字符串
- 关于苹果真机 getFullYear()返回值为NAN的问题
- meta小结
- laravel 配置MySQL读写分离
- JSON.stringify()的不常见用法
- ubuntu window 10 双系统
- SqlServer误删数据恢复
- HA主备路由模式的原理 + HA和负载均衡的区别
- Pygame安装教程
- 谈谈java多线程(一)
- 数据迁移工具Sqoop和DataX功能比较
- [CodeForce 801A] Vicious Keyboard
- AC自动机——多个kmp匹配
- 51nod 1258 序列求和 V4
- 安装Windows Installer服务