StringBuffer和StringBuilder有什么区别

StringBuffer

StringBuffer是由synchronized修饰的,线程安全,比较适合用于多线程对同一个StringBuffer操作的场景。
StringBuffer
类的声明:

 public final class StringBuffer
    extends AbstractStringBuilder
    implements java.io.Serializable, CharSequence
{

类的成员变量

private transient char[] toStringCache;
//继承自 AbstractStringBuilder
char[] value;
int count;

类的方法
StrngBuffer的所有方法都有synchronized修饰;
toString()方法
StringBuffer每次获取toString 都会直接使用缓存区的toStringCache值来构造一个字符串。

public synchronized String toString() {
        if (toStringCache == null) {
            toStringCache = Arrays.copyOfRange(value, 0, count);
        }
        return new String(toStringCache, true);
    }

StringBuffer和StringBuilder的类结构

继承和实现的关系图描述

StringBuilder

类的方法
StringBuilder的方法相较于StringBuffer去掉了synchronized

toString()方法
StringBuilder每次获取toString()都要复制一次字符数组,在构造一个字符串。

public String toString() {
        // Create a copy, don't share the array
        return new String(value, 0, count);
    }

总结

StringBuffer是线程安全的,他的所有公开方法都是同步的。
StringBuilder是线程不安全的,没有synchronized修饰。
StringBuilder的效率远大于StringBuffer,但是StringBuilder只适合用于单线程的场景下,而StringBuffer适用于多线程操作同一个StringBuffer对象。


版权声明:本文为weixin_44526589原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。