在我們的Java初級階段使用到字符串時最常用的是String類型,但是我們Java中對於字符串處理不僅有String類型,還有StringBuilder和StringBuffer,在這裏我們着重說一下StringBuilder的數組容量問題!
public class Demo {
public static void main(String[] args) {
//創建StringBuilder類對象
StringBuilder stb = new StringBuilder("china");
//添加
stb.append("good");
System.out.println(stb.length());
System.out.println(stb.capacity());
}
}
在這裏我們可以創建了StringBuilder類對象,並完成了一次添加操作,然後輸出了他的有效長度以及數組容量(在源碼中,StringBuilder是使用char類型數組進行存儲的)
有效長度大家都知道就是9;
這裏的數組容量結果是21;
想要弄清楚這裏的結果就不得不來看一下Java的源碼中在創建StringBuilder中是如何定義的
首先是無參構造方法:
public StringBuilder() {
super(16);
}
這裏的意思是給他分配一個長度爲16的字符數組。
再來看有參構造方法:
public StringBuilder(String str) {
super(str.length() + 16);
append(str);
}
這裏的有參構造方法有很多種類型,這裏我們只看String類型爲參數時作爲代表,是申請了一個 (初始字符串長度+16) 大小的數組,所以我們上面的數組容量在一開始創建時是21,在進行了一次添加操作後因爲沒有超出21,所以沒有發生改變,仍然是21.
在Java中,StringBuilder的出現就是解決String在拼接時出現大量String浪費空間,所以StringBuilder無論是在創建還是在添加時都在考慮數組的可用容量大小,使其更具有靈活性。