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


当前回答

但需要借助一个例子来明确区别吗?StringBuffer或StringBuilder

只需使用StringBuilder,除非您确实试图在线程之间共享缓冲区。StringBuilder是原始同步StringBuffer类的非同步(开销更少=效率更高)弟弟。

StringBuffer排名第一。Sun关注所有条件下的正确性,因此他们使其同步,以使其线程安全,以防万一。

StringBuilder后来出现了。StringBuffer的大多数使用都是单线程的,不必要地支付了同步的成本。

由于StringBuilder是没有同步的StringBuffer的替代品,因此任何示例之间都不会有差异。

如果您试图在线程之间共享,可以使用StringBuffer,但要考虑是否需要更高级别的同步,例如,如果您同步使用StringBuilder的方法,可能不需要使用StringBuffer。

其他回答

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

StringBuffer已同步,StringBuilder未同步。

字符串缓冲区

StringBuffer是可变的,这意味着可以更改对象的值。通过StringBuffer创建的对象存储在堆中。StringBuffer具有与StringBuilder相同的方法,但StringBuffer中的每个方法都是同步的,即StringBuffer是线程安全的。

因此,它不允许两个线程同时访问同一个方法。每个方法一次只能由一个线程访问。

但线程安全也有缺点,因为StringBuffer的性能由于线程安全属性而受到影响。因此,当调用每个类的相同方法时,StringBuilder比StringBuffer更快。

StringBuffer值可以更改,这意味着可以将其分配给新值。如今,这是一个最常见的面试问题,即上述课程之间的差异。字符串缓冲区可以通过使用toString()方法。

StringBuffer demo1 = new StringBuffer(“Hello”) ;
// The above object stored in heap and its value can be changed .

demo1=new StringBuffer(“Bye”);
// Above statement is right as it modifies the value which is allowed in the StringBuffer

字符串拼接

StringBuilder与StringBuffer相同,即它将对象存储在堆中,也可以对其进行修改。StringBuffer和StringBuilder之间的主要区别是StringBuilder也不是线程安全的。StringBuilder速度快,因为它不是线程安全的。

StringBuilder demo2= new StringBuilder(“Hello”);
// The above object too is stored in the heap and its value can be modified

demo2=new StringBuilder(“Bye”);
// Above statement is right as it modifies the value which is allowed in the StringBuilder

资源:字符串Vs StringBuffer Vs StringBuilder

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

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

字符串缓冲区:

多线程已同步比StringBuilder慢

字符串拼接

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