在创建一个StringBuilder的空字符串对象后, 调用capacity()方法, 可以看到该对象(char[]类型) 默认容量为16,
public static void main(String[] args) {
//创建一个StringBuilder对象
StringBuilder sb = new StringBuilder();
System.out.println(sb.capacity());
}
运行结果
16
但如果起初创建的StringBuilder对象时所调用的不是上述默认初始化的构造方法, 而是一个添加了非空字符串内容的, 如下
StringBuilder sb = new StringBuilder("abc");
System.out.println(sb.capacity());
运行结果会显示
19
为了验证"StringBuilder对象在创建时有无字符串参数对其初始容量是有影响的"这一猜想, 查看StringBuilder类源码, 可以发现(如下代码)
...
AbstractStringBuilder(String str) {
int length = str.length();
int capacity = (length < Integer.MAX_VALUE - 16)
? length + 16 : Integer.MAX_VALUE;
final byte initCoder = str.coder();
coder = initCoder;
value = (initCoder == LATIN1)
? new byte[capacity] : StringUTF16.newBytesFor(capacity);
append(str);
} ...
这表明StringBuilder带参构造所引起的初始capacity的增加是由于继承了它的父类AbstractStringBuilder的特性, 高亮代码表明 "如果对象创建时的字符串参数长度为3, 则capacity = 16(默认容量)+ 3; 如果长度为length, 则capacity = 16 + length; 依此类推"