Java千百問_06資料結構(021)_StringBuffer/StringBuilder有什麼區別
阿新 • • 發佈:2019-01-02
1、StringBuilder是什麼
StringBuilder是非執行緒安全的可變字串類。
java.lang.StringBuilder這個可變的字元序列類是5.0新增的。繼承於AbstractStringBuilder(大部分方法都在該類實現),並不是執行緒安全的,當多個執行緒同時修改一個物件時很可能會衝突。
瞭解String是什麼看這裡:String是什麼
部分AbstractStringBuilder、StringBuilder原始碼:
abstract class AbstractStringBuilder implements Appendable, CharSequence {
public AbstractStringBuilder append(Object obj) {
return append(String.valueOf(obj));
}
public AbstractStringBuilder append(String str) {
if (str == null ) str = "null" ;
int len = str.length();
ensureCapacityInternal(count + len);
str.getChars( 0 , len, value, count);
count += len;
return this ;
}
}
public final class StringBuilder extends AbstractStringBuilder implements java.io.Serializable, CharSequence
{
public StringBuilder append(Object obj) {
return append(String.valueOf(obj));
}
public StringBuilder append(String str) {
super . append(str);
return this ;
}
}
2、StringBuffer是什麼
StringBuffer是執行緒安全的可變字串類
java.lang.StringBuffer繼承於AbstractStringBuilder(同StringBuilder一樣也繼承於該類,並且部分方法都在該類實現),重寫了其大部分方法,邏輯沒變只是將其改為synchronized執行緒同步。
部分StringBuffer原始碼:
public final class StringBuffer extends AbstractStringBuilder implements java.io.Serializable, CharSequence
{
public synchronized StringBuffer append(Object obj) {
super . append(String.valueOf(obj));
return this ;
}
public synchronized StringBuffer append(String str) {
super . append(str);
return this ;
}
}
3、StringBuffer/StringBuilder有什麼區別
由上面概念可以看到,StringBuffer是執行緒安全的,而StringBuilder並不是,StringBuilder在多執行緒中可能會發生衝突。
所以,當要保證執行緒安全的時候就需要用StringBuffer,然而在多執行緒時,StringBuffer比StringBuilder效能要差(synchronized相當於執行緒堵塞)。