1. 程式人生 > >Java中的StringBuffer和StringBuilder

Java中的StringBuffer和StringBuilder

StringBuffer

     執行緒安全可變字元序列。

  StringBuffer 上的主要操作是 append 和 insert 方法,可過載這些方法,以接受任意型別的資料。每個方法都能有效地將給定的資料轉換成字串,然後將該字串的字元追加或插入到字串緩衝區中。append 方法始終將這些字元新增到緩衝區的末端;而 insert 方法則在指定的點新增字元。

StringBuffer的 無參構造預設容量為16,將字串str作為引數構造時,容量為16+str.length。

原始碼:

 public StringBuffer() {
        super(16);
    }
public StringBuffer(String str) {
    super(str.length() + 16);
    append(str);
}

append方法:

    有效地將給定的資料轉換成字串,然後將該字串的字元追加到字串緩衝區中

    例如:給字串"I love " 追加字串"you"

 StringBuffer sb=new StringBuffer("I love ");
        sb.append("you");
        System.out.println("sb="+sb);

  結果是:sb=I love you

 

insert方法:

還是給字串“I love you ”插入"you"。

例如:

StringBuffer sb=new StringBuffer("I love ");
        sb.insert(7,"you");
        System.out.println("sb="+sb);

結果是:sb=I love you

insert()裡面第一個引數是插入的位置,我是給"I love "後面插入的,算上空格共有7個字元,所以從索引為7也就是第8個位置開始插入。

另外,StringBuffer還有一個String沒有的反轉功能public StringBuffer reverse()

,將緩衝區中的字元序列反轉取代,返回它(字串衝)本身 

 StringBuffer sb=new StringBuffer("123456");
        System.out.println(sb.reverse());

結果:654321

......

StringBuffer它兄弟StringBuilder 

從 JDK 5 開始,為該類補充了一個單個執行緒使用的等價類,即 StringBuilder。與該類相比,通常應該優先使用 StringBuilder 類,因為它支援所有相同的操作,但由於它不執行同步,所以速度更快。

......

StringBuilder

一個可變的字元序列。此類提供一個與 StringBuffer 相容的 API,但不保證同步。該類被設計用作 StringBuffer 的一個簡易替換,用在字串緩衝區被單個執行緒使用的時候(這種情況很普遍)。如果可能,建議優先採用該類,因為在大多數實現中,它比 StringBuffer 要快。

但是將 StringBuilder 的例項用於多個執行緒是不安全的。如果需要這樣的同步,則建議使用 StringBuffer

......

如有錯誤之處,望指正