StringBuffer 和 StringBuilder

String、StringBuffer、StringBuilder都是字符数组

public final class String
    implements java.io.Serializable, Comparable<String>, CharSequence {
    /** The value is used for character storage. */
    private final char value[];

    /** Cache the hash code for the string */
    private int hash;
    ......  
}
abstract class AbstractStringBuilder implements Appendable, CharSequence {
    /**
     * The value is used for character storage.
     */
    char[] value;
}
 public final class StringBuffer
    extends AbstractStringBuilder
    implements java.io.Serializable, CharSequence
{}
public final class StringBuilder
    extends AbstractStringBuilder
    implements java.io.Serializable, CharSequence
{}

StringBuffer 和 StringBuilder 都是可变的字符序列

String 类的成员变量 value 是 final 的。而StringBuffer 和 StringBuilder的共同父类的成员变量 value 不是final 的,是可以改变的。

StringBuffer 和 StringBuilder改变的方法是数组扩展。


StringBuffer 是多线程安全的,StringBuilder 是多线程不安全的

StringBuffer的修改方法都是同步方法,都有关键字synchronized;StringBuilder的修改方法都没有使用 synchronized 修饰。

原文地址:https://www.cnblogs.com/Mike_Chang/p/9863596.html