區別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。