淺談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 判斷一下 容量如果不夠,直接擴充到需要的容量大小。
 
 
 
例子:

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM