StringBuilderのバッファ容量を確認するには .capacity()メソッドを使用します。
サンプル
例)StringBuilderのバッファ容量を表示する
1 2 3 4 5 6 7 8 9 10 11 12 13 |
public class Sample { public static void main(String[] args) { StringBuilder sb = new StringBuilder(); System.out.println(sb.capacity()); sb.append("123456789"); System.out.println(sb.capacity()); sb.append("123456789"); System.out.println(sb.capacity()); } } |
- (結果)
- 16 16 34
文字列を追加すると capacityの容量が自動で拡張するのが分かります。
備考
- デフォルトでは16です。
- 文字列を追加すると自動的に容量も追加されます。
- StringBufferクラスも同様にバッファ容量を確認できます。
質問なのですが、8行目で表示したバッファが16なのはなぜですか?
文字列が追加されると容量も追加されるのであれば、7行目で追加した文字列分のバッファが追加される気がするのですが……
コメントが遅くなりすみません
4行目ではバッファ数を指定せずにStringBuilderをnewしているため、
バッファ数は16です。
(空の器が16個用意されるイメージです)
7行目では9文字追加していますが、
空の器が16個あり、全てそこに入りきるので器の数は16のままです。
(16個の器の内、9個が埋まっていて7個が空いているイメージです)
10行目ではさらに9文字追加しています
ここで初めて器の数を超えることになります。
StringBuilderでは、現在の器を超えた場合は
必要な容量+16のバッファを用意しようとするので、
現在必要な数(9+9) + バッファ(16)→34となり
capacity数は34になります。
なので、文字列を追加して現在の容量からあふれる場合のみ
バッファが追加される感じになります