StringBuffer和StringBuilder之间的主要区别是什么?在决定其中任何一项时是否存在性能问题?


当前回答

StringBuilder是在Java1.5中引入的,因此它不能与早期的JVM一起使用。

从Javadocs:

StringBuilder类提供了与StringBuffer兼容的API,但不能保证同步。该类被设计为在单个线程使用字符串缓冲区的地方(通常情况下)作为StringBuffer的替代品。在可能的情况下,建议优先使用该类而不是StringBuffer,因为在大多数实现中,它会更快。

其他回答

字符串缓冲区:

多线程已同步比StringBuilder慢

字符串拼接

单线程未同步比以往更快的字符串

StringBuffer和StringBuilder源之间的差异:

其他人正确地指出了两者之间的关键区别。然而,在性能方面,我想补充一点,JVM级别的优化“锁定Elision”可以使同步上下文中的性能差异几乎不存在。关于这一点的精彩阅读在这里和这里

StringBuffer已同步,但StringBuilder未同步。因此,StringBuilder比StringBuffer更快。

StringBuilder比StringBuffer更快,因为StringBuffer是同步的,StringBuffer有自己的char[]缓冲区用于缓存,就像BufferedInputStream一样。

StringBuffer速度较慢的另一个原因是,每次添加或删除时,它都会更新变量缓冲区。我测试了它,如果我移除超过一万次,StringBuffer的移除方法会更快。