Java之StringBuilder數組容量

在我們的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無論是在創建還是在添加時都在考慮數組的可用容量大小,使其更具有靈活性。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章