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. 测试循环中字符串拼接优化

  1. jdk5

  2. jdk6

  3. jdk7

  4. jdk8

    结论:

    1. 对比jdk5-8所有版本下的反编译字节码,发现结果相同,证明字符串拼接从jdk5开始就已经完成了优化,并且没有进行新的优化。
    2. 详细看反编译后的字节码,8开始进入for循环比较阶段,11new一个新的StringBuilder,为了优化之后的String+操作。34循环结束,重新到5,将会在11重新new一个StringBuilder。
    3. 循环外字符串拼接可以直接使用String的+操作,没有必要通过StringBuilder进行append.
    4. 由于循环中每次都会回到5,所以会不停的创建StringBuilder对象,除了循环体后就成了无效对象,这样会产生大量的垃圾对象。所以好的做法是在循环外声明StringBuilder对象,在循环内进行手动append。不论循环多少层都只有一个StringBuilder对象。

jdk不同版本对String拼接的优化分析相关推荐

  1. string拼接_String拼接操作-的优化

    很多讲Java优化的文章都会强调对String拼接的优化.倒不用特意记,本质上在于对不可变类优势和劣势的理解上. 需要关注的是编译器对String拼接做出的优化,在简单场景下的性能能够与StringB ...

  2. android string拼接字符串_String对象的存储、拼接和比较

    一.String类型介绍 String类型是引用数据类型,表示字符串类型.String底层使用byte[]数组来存储char[]数组.(JDK1.9及以后的版本,JDK1.9之前是使用char数组保存 ...

  3. java JDK各版本的变化及区别

    jdk1.2的新特性: 1.java提供了实现常见数据结构的类,这些实现数据结构的类统称为Java集合框架 jdk1.5的新特性: 1. 泛型jdk1.5之后Java集合框架开始支持泛型,主要目的是建 ...

  4. JDK各个版本的区别

    原地址:https://blog.csdn.net/papima/article/details/78219001 jdk1.5的新特性: 1. 泛型    ArrayList list=new Ar ...

  5. java基础总结(十九)--JDK各个版本的区别

    来自:https://blog.csdn.net/papima/article/details/78219001 jdk1.5的新特性: 1. 泛型    ArrayList list=new Arr ...

  6. JDK 各版本汇总表

    提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 一.JDK各版本,时间表 二.JDK各版本.新特性 JDK4 JDK5 JDK6 JDK7 JDK8 JDK9 JDK10 ...

  7. Java中string拼接,StringBuilder,StringBuffer和+

    Java中string拼接,StringBuilder,StringBuffer和+,到底哪个更合适? StringBuilder线程不安全,效率较线程安全的StringBuffer高.jdk1.5之 ...

  8. java编译器jdk版本_以编程方式确定Java类的JDK编译版本

    java编译器jdk版本 当需要确定使用哪个JDK版本来编译特定的Java .class文件时, 通常使用的方法是使用javap并在javap输出中查找列出的"主要版本". 我在我 ...

  9. 以编程方式确定Java类的JDK编译版本

    当需要确定使用哪个JDK版本来编译特定的Java .class文件时, 通常使用的方法是使用javap并在javap输出中查找列出的"主要版本". 我在博客文章Autoboxing ...

最新文章

  1. 2015级C++第14周程序阅读 STL中的简单容器和迭代器
  2. c语言不用switch做计算器,超级新手,用switch写了个计算器程序,求指导
  3. tvnewpro 病毒清除
  4. Qt Remote Object(QtRO)动态Replica实现进程间通信
  5. ES6—类的实现原理
  6. 一道面试题,我自己的解法
  7. java Split 用法
  8. MySQL双主(master-master)补充
  9. turtle fillcolor_python3的turtle画模仿3d星空、运动的恒星小宇宙
  10. ORACLE成果,天天10问(四)
  11. HDOJ--1233--还是畅通工程
  12. python梦幻西游辅助_GitHub - woshiliushan/mhxy_fz: 一个基于计算机视觉开发的梦幻西游辅助脚本...
  13. 快排 c语言,c语言的库函数之快排
  14. 如何考上复旦大学研究生
  15. 前端请求接口报405错误
  16. 【计算机网络】PPP和PPPoE协议
  17. DrawIO怎么画出卡通效果的图?
  18. printf 函数使用 可变参数函数实现原理
  19. C55X McBSP
  20. python做网站开发_如何用Python做网站开发

热门文章

  1. 爬虫入门--爬取就业网站上的岗位信息构造数据集
  2. 平安京s9服务器维护,决战平安京:S9赛季对战调整,射核版本终结,打野获益最大...
  3. activiti act_re_model 分析
  4. 【Leetcode】213. 打家劫舍II(House Robber II)
  5. matlab复制txt里的一列,将txt格式里的两列数据复制粘贴导入excel 后全都在同一列里,怎样让它们分成两列?...
  6. 免费的SEO在线工具
  7. 北京中医药大学计算机学什么,北京中医药大学《计算机基础》平时作业3
  8. python中删除某一行_python 删除大文件中的某一行(最有效率的方法)
  9. Word文档的基础教程
  10. 用Java实现支持圆形带五角星 方形电子印章