1. 程式人生 > >淺談StringBuffer類初始容量及擴容

淺談StringBuffer類初始容量及擴容

StringBuffer類可以建立可修改的字串序列。該類有StringBuffer(),StringBuffer(int size),StringBuffer(String s)三個改造方法。

1.StringBuffer()的初始容量可以容納16個字元,當該物件的實體存放的字元的長度大於16時,實體容量就自動增加。StringBuffer物件可以通過length()方法獲取實體中存放的字元序列長度,通過capacity()方法來獲取當前實體的實際容量。

2.StringBuffer(int size)可以指定分配給該物件的實體的初始容量引數為引數size指定的字元個數。當該物件的實體存放的字元序列的長度大於size個字元時,實體的容量就自動的增加。以便存放所增加的字元。

3.StringBuffer(String s)可以指定給物件的實體的初始容量為引數字串s的長度額外再加16個字元。當該物件的實體存放的字元序列長度大於size個字元時,實體的容量自動的增加,以便存放所增加的字元。

接下來介紹StringBuffer()怎樣擴容:

首先我們需要知道StringBuffer和StringBuilder類都繼承了抽象類AbstractStringBuilder類;

原始碼都呼叫父類來進行初始化:


StringBuffer(String s)的初始化:


擴容演算法: 使用append()方法在字串後面追加東西的時候,如果長度超過了該字串儲存空間大小了就需要進行擴容:構建新的儲存空間更大的字串,將久的複製過去;
再進行字串append新增的時候,會先計算新增後字串大小,傳入一個方法:ensureCapacityInternal 這個方法進行是否擴容的判斷,需要擴容就呼叫expandCapacity方法進行擴容: 嘗試將新容量擴為大小變成2倍+2   if 判斷一下 容量如果不夠,直接擴充到需要的容量大小。