查看所有目錄
StringBuilder從類名語義上來說String構(gòu)建者母蛛,用來創(chuàng)建String的捌锭。在java開發(fā)中經(jīng)常用到String處理字符串,但String對象是一個常量洗贰,一旦創(chuàng)建后不能改變,所以無法對其進(jìn)行修改操作顶滩,對String對象的操作,實際上是不斷的創(chuàng)建新的String對象寸爆。為了使字符串可以改變礁鲁,java引入了可變的字符串StringBuild類。
定義:
public final class StringBuilder extends AbstractStringBuilder implements java.io.Serializable, CharSequence{}
StringBuilder繼承自AbstractStringBuilder類赁豆,是final類型的仅醇,不能再被其它類繼承。實現(xiàn)了Serializable和CharSequence接口魔种。
構(gòu)造方法:
無參構(gòu)造方法:
public StringBuilder() {
super(16);
}
無參構(gòu)造方法析二,調(diào)用了父類的構(gòu)造方法,初始容量為16個字符.
String參數(shù)構(gòu)造方法:
public StringBuilder(String str) {
super(str.length() + 16);
append(str);
}
一個String參數(shù)的構(gòu)造方法节预,初始容量為字符串長度加16個字符.
CharSequence參數(shù)構(gòu)造方法:
public StringBuilder(CharSequence seq) {
this(seq.length() + 16);
append(seq);
}
CharSequence參數(shù)的構(gòu)造方法叶摄,同String參數(shù)的構(gòu)造方法類似。
其它方法:
writeObject:
private void writeObject(java.io.ObjectOutputStream s)
throws java.io.IOException {
s.defaultWriteObject();
s.writeInt(count);
s.writeObject(value);
}
在進(jìn)行序列化的時候保存StringBuilder對象的狀態(tài)到一個流中安拟。
readObject:
private void readObject(java.io.ObjectInputStream s)
throws java.io.IOException, ClassNotFoundException {
s.defaultReadObject();
count = s.readInt();
value = (char[]) s.readObject();
}
反序列化時從流中獲取StringBuild對象序列化之前的狀態(tài)蛤吓。
toString:
public String toString() {
// Create a copy, don't share the array
return new String(value, 0, count);
}
返回StringBuilder對象的字符串形式,創(chuàng)建了一個新的字符串對象去扣,代碼注釋說了創(chuàng)建一個副本柱衔,而不要去共享這個內(nèi)部維護(hù)的數(shù)組,因為返回的是String對象愉棱,不可變的唆铐,如果返回了數(shù)組的共享,在改變StringBuilder對象時奔滑,String對象的內(nèi)容隨之改變艾岂,這就破壞了String對象的不可變性。
StringBuilder類中其它的方法都是重寫了父類中的方法朋其,調(diào)用了父類的實現(xiàn)王浴。具體實現(xiàn)可查看基父類AbstractStringBuilder,這里就不再列出了梅猿。需要注意一點的是StringBuilder是線程不安全的氓辣,在單線程程序中使用效率會高很多。在多線程程序中要慎用袱蚓。