从jdk 5开始,Java就对String字符串的+
操作进行了优化,该操作编译成字节码文件后会被优化为StringBuilder的append操作。但是,我们不能一味地把String的+
操作等同于append操作。
可以看这篇文章的对反编译字节码文件的分析:
jdk不同版本对String拼接的优化分析
这里只做总结:
- 字符串拼接从jdk5开始就已经完成了优化,并且没有进行新的优化。
- 循环内String+常量的话会每次new一个StringBuilder,再调用append方法。
- 循环外字符串拼接可以直接使用String的+操作,没有必要通过StringBuilder进行append.
- 有循环体的话,好的做法是在循环外声明StringBuilder对象,在循环内进行手动append。不论循环多少层都只有一个StringBuilder对象。