StringBuffer類概述
當我們對字符串進行拼接操作的時候,每次拼接,都會創建一個新的String對象,這樣的話既耗時又浪費空間。
而StringBuffer可以解決這個問題。
StringBuffer類是線程安全的可變字符序列,是一個類似於 String 的字符串緩衝區,但不能修改。雖然在任意時間點上它都包含某種特定的字符序列,但通過某些方法調用可以改變該序列的長度和內容。
StringBuffer 上的主要操作是 append 和 insert 方法,可重載這些方法,以接受任意類型的數據。每個方法都能有效地將給定的數據轉換成字符串,然後將該字符串的字符添加或插入到字符串緩衝區中。append 方法始終將這些字符添加到緩衝區的末端;而 insert 方法則在指定的點添加字符。
每個字符串緩衝區都有一定的容量。只要字符串緩衝區所包含的字符序列的長度沒有超出此容量,就無需分配新的內部緩衝區數組。如果內部緩衝區溢出,則此容量自動增大。從 JDK 5 開始,爲該類補充了一個單個線程使用的等價類,即 StringBuilder。與該類相比,通常應該優先使用 StringBuilder 類,因爲它支持所有相同的操作,但由於它不執行同步,所以速度更快。
構造方法
StringBuffer類重載了構造方法,且含有空參構造。
StringBuffer的常用方法
capacity()方法:
該方法獲取當前容量。理論值
length()方法:
獲取長度即字符數。實際值
StringBuffer類的添加功能
append()方法:
可以把任意類型數據添加到字符串緩衝區裏面,並返回字符串緩衝區本身。
上述方法是將String類型的數據添加到字符串緩衝區裏,然後返回字符串緩衝區本身。
insert()方法:
在指定位置把任意類型的數據插入到字符串緩衝區裏面,並返回字符串緩衝區本身。
上述方法是在指定位置將String類型的數據插入到字符串緩衝區裏,並返回字符歘緩衝區本身。
StringBuffer類的刪除功能
deleteCharAt()方法:
該方法刪除指定位置的字符,並返回本身。
delete()方法:
該方法刪除從指定位置開始指定位置結束的內容,並返回本身。
StringBuffer類的替換和反轉功能
替換功能:
replace()方法:
該方法是將從start開始到end的字符串用str替換,並返回本身。
反轉功能:
reverse()方法:
該方法進行字符串的反轉,並返回本身。
StringBuffer的截取功能
substring()方法:
從指定位置截取到末尾,返回值類型不再是StringBuffer本身,而是String類型。
從指定位置開始到結束位置進行截取,包括開始位置,不包括結束位置。返回值類型不再是StringBuffer本身,而是String類型。
StringBuffer和String的相互轉換
String到StringBuffer:
- 通過構造方法
- 通過append()方法
StringBuffer到String:
- 使用substring方法
- 通過構造方法
- 通過toString()方法
String和StringBuffer分別作爲參數傳遞
- String作爲參數傳遞:String雖然是引用類型,但是它是一個常量,所以在做傳遞的時候,完全可以將其看成基本數據類型數據進行傳遞,即值傳遞。
- StringBuffer作爲參數傳遞,是引用傳遞,形參的改變會影響實參。
StringBuffer和StringBuilder的區別
StringBuilder類是一個可變的字符序列。此類提供一個與 StringBuffer 兼容的 API,但不保證同步。該類被設計用作 StringBuffer 的一個簡易替換,用在字符串緩衝區被單個線程使用的時候(這種情況很普遍)。如果可能,建議優先採用該類,因爲在大多數實現中,它比 StringBuffer 要快。
將 StringBuilder 的實例用於多個線程是不安全的。如果需要這樣的同步,則建議使用 StringBuffer。