Strng StringBuffer StringBuilder

先來講下總的區別:數組

1.String 不可變,StringBuffer StringBuilder可變安全

2.StringBuilder,String線程安全,StringBuffer不安全app

而後咱們從源碼來看下緣由(由於博主必需要理解才能記住,否則就是一條魚,尷尬)ide

問題1:爲何String 是不可變的,StringBuffer StringBuilder可變?ui

例子:this

String sb3=new String("ab");
public String(String original) {
    this.value = original.value;
    this.hash = original.hash;
}
private final char value[];

String對象底層實際上是個數組,並且是final修飾的,下一篇準備整理下final關鍵字線程

StringBuilder sb1=new StringBuilder("ab");
public StringBuilder(String str) {
    super(str.length() + 16);
    append(str);
}
AbstractStringBuilder(int capacity) {
    value = new char[capacity];
}
char[] value;

因而可知,StringBuilder對象底層也是數組,可是沒有用final修飾,因此StringBuilder可變.StringBuffer同樣.對象

問題2:StringBuilder,String線程安全,StringBuffer不安全ci

String不可變,線程安全是確定的,主要比較StringBuilder 和StringBuffer源碼

仍是從源碼來看,以append()方法做爲例子:

//StringBuffer的append()方法
@Override
public synchronized StringBuffer append(String str) {
    toStringCache = null;
    super.append(str);
    return this;
}
//StringBuilder的方法
@Override
public StringBuilder append(CharSequence s) {
    super.append(s);
    return this;
}
相關文章
相關標籤/搜索