首頁 >Java >java教程 >string中stringbuffer和stringbuilder的差別?

string中stringbuffer和stringbuilder的差別?

coldplay.xixi
coldplay.xixi原創
2020-07-02 14:14:424965瀏覽

string中stringbuffer和stringbuilder的區別是:1、StringBuffer是線程安全,而StringBuilder是線程不安全;2、StringBuffer公開方法同步,而StringBuilder沒有。

string中stringbuffer和stringbuilder的差別?

string中stringbuffer和stringbuilder的差異是:

##區別1:線程安全

#StringBuffer:線程安全,StringBuilder:線程不安全。因為 StringBuffer 的所有公開方法都是 synchronized 修飾的,而 StringBuilder 並沒有 StringBuilder 修飾。

StringBuffer 程式碼片段:

@Override
public synchronized StringBuffer append(String str) {
    toStringCache = null;
    super.append(str);
    return this;
}

區別2:緩衝區

StringBuffer 程式碼片段:

private transient char[] toStringCache;
@Override
public synchronized String toString() {
    if (toStringCache == null) {
        toStringCache = Arrays.copyOfRange(value, 0, count);
    }
    return new String(toStringCache, true);
}

StringBuilder 程式碼片段:

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

可以看出,StringBuffer 每次取得toString 都會直接使用快取區的toStringCache 值來建構一個字串。

而 StringBuilder 則每次都需要複製一次字元數組,再建構一個字串。

所以,緩存沖這也是對 StringBuffer 的最佳化吧,不過 StringBuffer 的這個toString 方法仍然是同步的。

區別3:效能

既然StringBuffer 是執行緒安全的,它的所有公開方法都是同步的,StringBuilder 是沒有對方法加鎖同步的,所以毫無疑問,StringBuilder 的效能要遠大於StringBuffer。

相關學習推薦:

Java影片教學

#

以上是string中stringbuffer和stringbuilder的差別?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn