StringBuffer和StringBuilder都可以高效的处理字符串,StringBuffer是线程安全的,StringBuilder是线程不安全的,当然StringBuilder性能更高一些。
因此理论上在多线程的场景下我们应该使用线程安全的StringBuffer。
但是
最后,为什么会有stringbuffer的存在?答案很简单,因为最早是没有stringbuilder的,sun公司的开发者不知道处于什么考虑,决定让stringbuffer是线程安全的,然后大约10年之后,人们终于意识到这是一个愚蠢的决定,于是,在jdk1.5的时候,决定提供一个非线程安全的stringbuffer实现,并命名为stringbuilder。
如果没有循环的情况下,单行用加号拼接字符串是没有性能损失的,java编译器会隐式的替换成stringbuilder,但在有循环的情况下,编译器没法做到足够智能的替换,仍然会有不必要的性能损耗,因此,用循环拼接字符串的时候,还是老老实实的用stringbuilder吧。
原文:https://www.cnblogs.com/Raymon-Geng/p/13181697.html