string中stringbuffer和stringbuilder的區別是:1、StringBuffer是線程安全,而StringBuilder是線程不安全;2、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。相關學習推薦:#
以上是string中stringbuffer和stringbuilder的差別?的詳細內容。更多資訊請關注PHP中文網其他相關文章!