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


当前回答

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

其他回答

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

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

StringBuilder不是线程安全的。字符串缓冲区是。更多信息请点击此处。

编辑:至于性能,在热点启动后,StringBuilder是赢家。然而,对于较小的迭代,性能差异可以忽略不计。

首先让我们看看相似之处:StringBuilder和StringBuffer都是可变的。这意味着您可以在同一位置更改它们的内容。

差异:StringBuffer也是可变的和同步的。其中,作为StringBuilder是可变的,但默认情况下不同步。

同步(synchronization)的含义:当某些东西被同步时,多个线程可以访问并修改它,而不会产生任何问题或副作用。StringBuffer是同步的,因此您可以在多个线程中使用它,而不会出现任何问题。

何时使用哪一个?StringBuilder:当您需要一个可以修改的字符串,并且只有一个线程在访问和修改它时。StringBuffer:当您需要一个可以修改的字符串,并且多个线程正在访问和修改它时。

注意:不要不必要地使用StringBuffer,也就是说,如果只有一个线程在修改和访问它,就不要使用它,因为它有很多用于同步的锁定和解锁代码,这将不必要地占用CPU时间。除非需要,否则不要使用锁。

StringBuffer是线程安全的,但StringBuilder不是线程安全的。StringBuilder比StringBuffer更快。StringBuffer已同步,而StringBuilder未同步同步。

很好的问题

以下是我注意到的差异:

字符串缓冲区:-

StringBuffer is  synchronized
StringBuffer is  thread-safe
StringBuffer is  slow (try to write a sample program and execute it, it will take more time than StringBuilder)

StringBuilder:-

 StringBuilder is not synchronized 
 StringBuilder is not thread-safe
 StringBuilder performance is better than StringBuffer.

常见问题:-

两者都有相同的方法和相同的签名。两者都是可变的。