古詩詞大全網 - 成語大全 - stringbuffer和stringbuilder的區別?

stringbuffer和stringbuilder的區別?

區別1:線程安全

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

StringBuffer代碼片段:

@Overridepublic 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);

}

區別3:性能

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