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


当前回答

由于StringBuffer是同步的,因此需要额外的工作,因此基于性能,它比StringBuilder慢一点。

其他回答

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

StringBuffer已同步,StringBuilder未同步。

StringBuilder和StringBuffer之间没有基本区别,它们之间只有一些区别。在StringBuffer中,方法是同步的。这意味着一次只能有一个线程对它们进行操作。如果有多个线程,那么第二个线程将不得不等待第一个线程完成,第三个线程将必须等待第一个和第二个完成,依此类推。这使得进程非常缓慢,因此StringBuffer的性能很低。

另一方面,StringBuilder不同步。这意味着多个线程可以同时对同一StringBuilder对象进行操作。这使得过程非常快,因此StringBuilder的性能很高。

由于StringBuffer是同步的,因此需要额外的工作,因此基于性能,它比StringBuilder慢一点。

字符串缓冲区是可变的。它可以在长度和内容方面改变。StringBuffers是线程安全的,这意味着它们有同步的方法来控制访问,这样一次只有一个线程可以访问StringBuffer对象的同步代码。因此,StringBuffer对象在多线程环境中使用通常是安全的,因为多个线程可能同时尝试访问同一StringBuffer。

字符串拼接StringBuilder类与StringBuffer非常相似,只是它的访问不同步,因此不是线程安全的。通过不同步,StringBuilder的性能可以优于StringBuffer。因此,如果您在单线程环境中工作,使用StringBuilder而不是StringBuffer可能会提高性能。这也适用于其他情况,例如StringBuilder局部变量(即方法中的变量),其中只有一个线程将访问StringBuilder对象。