天天看點

StringBuffer、StringBuilder類

為什麼要引入StringBuffer類:

1、字元串特點:字元串是常量;它們的值在建立之後不能更改。

2、字元串的内容一旦發生了變化,那麼馬上會建立一個新的對象。

3、注意: 字元串的内容不适宜頻繁修改,因為一旦修改馬上就會建立一個新的對象。

4、如果需要頻繁修改字元串 的内容,建議使用字元串緩沖類(StringBuffer)。

5、StringBuffer 其實就是一個存儲字元的容器。

還是照舊先說一下StringBuffer類的方法(大家可以檢視一下API文檔,會發現StringBuffer類的方法甚多,在此Endeavor給大家介紹一些常用的):

1)增加

append(boolean b) 可以添加任意類型 的資料到容器中

StringBuffer、StringBuilder類

insert(int offset, boolean b) 指定插入的索引值,插入對應 的内容。

StringBuffer、StringBuilder類
StringBuffer、StringBuilder類

2)删除

StringBuffer、StringBuilder類

delete(int start, int end) 根據指定的開始與結束的索引值删除對應的内容。

deleteCharAt(int index) 根據指定的索引值删除一個字元。

StringBuffer、StringBuilder類

3)修改

replace(int start, int end, String str) 根據指定的開始與結束索引值替代成指定的内容。

reverse() 翻轉字元串緩沖類的内容。 abc—>cba

setCharAt(int index, char ch) 把指定索引值的字元替換指定的字元。

substring(int start, int end) 根據指定的索引值截取子串

ensureCapacity(int minimumCapacity) 指定StringBuffer内部的字元數組長度的。

StringBuffer、StringBuilder類

4)檢視

indexOf(String str, int fromIndex) 查找指定的字元串第一次出現的索引值,并且指定開始查找的位置。

lastIndexOf(String str) 查找指定的字元串最後一次出現的索引值。

capacity() 檢視目前字元數組的長度。

length()

charAt(int index)

toString() 把字元串緩沖類的内容轉成字元串傳回。

StringBuffer、StringBuilder類

擴充一下:

有這樣一道題目:使用Stringbuffer無 參的構造函數建立 一個對象時,預設的初始容量是多少? 如果長度不夠使用了,自動增長多少倍?

答:StringBuffer 底層是依賴了一個字元數組才能存儲字元資料 的,該字元串數組預設 的初始容量是16, 如果字元數組的長度不夠使用時,自動增長1倍。

StringBuffer、StringBuilder類
StringBuffer、StringBuilder類
StringBuffer、StringBuilder類

檢視下源碼就一目了然了,實則記憶體的擴充為(2倍+2)。

接下來介紹一下StringBuilder類,大家有沒有覺得它和StringBuffer類名字非常相似,其實它們的功能也非常相似。

相同點:

1)兩個類都是字元串緩沖類。

2)兩個類的方法都是一緻的。

不同點:

1)StringBuffer是線程安全的,操作效率低 ,StringBuilder是線程非安全的,操作效率高。

2)StringBuffer是jdk1.0出現的,StringBuilder 是jdk1.5的時候出現的。

線程安全簡單了解為,程式隻能在同一時間被另一個程式調用,而非線程安全則是同一時間被多個程式調用。但是實際中很少存在多個程式在同一時間被調用的,是以多數情況都選擇StringBuilder類。

推薦使用: StringBuilder,因為操作效率高。

繼續閱讀