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
。
......
如有錯誤之處,望指正