1. 程式人生 > >Java千百問_06資料結構(021)_StringBuffer/StringBuilder有什麼區別

Java千百問_06資料結構(021)_StringBuffer/StringBuilder有什麼區別

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相當於執行緒堵塞)。