public static void main(String args[])
{
StringBuffer str=new StringBuffer();
str.append("大家好");
System.out.println("str:"+str);
System.out.println("length:"+str.length());
System.out.println("capacity:"+str.capacity());
}
此结果运行结果为:str:大家好
length:3
capacity:16
当我把str.append("大家好")改为str.append("大家好,我们大家都很愿意学习Java语言")时,结果为
str:大家好,我们大家都很愿意学习Java语言
length:20
capacity:34 (请问此处为何是34呢?)
{
StringBuffer str=new StringBuffer();
str.append("大家好");
System.out.println("str:"+str);
System.out.println("length:"+str.length());
System.out.println("capacity:"+str.capacity());
}
此结果运行结果为:str:大家好
length:3
capacity:16
当我把str.append("大家好")改为str.append("大家好,我们大家都很愿意学习Java语言")时,结果为
str:大家好,我们大家都很愿意学习Java语言
length:20
capacity:34 (请问此处为何是34呢?)
public StringBuffer() {
super(16);//默认capacity为16
}public AbstractStringBuilder append(String str) {
if (str == null) str = "null";
int len = str.length();
if (len == 0) return this;
int newCount = count + len;
if (newCount > value.length)
expandCapacity(newCount);
str.getChars(0, len, value, count);
count = newCount;
return this;
}void expandCapacity(int minimumCapacity) {
int newCapacity = (value.length + 1) * 2;//在扩展capacity时(16+1)*2=34
if (newCapacity < 0) {
newCapacity = Integer.MAX_VALUE;
} else if (minimumCapacity > newCapacity) {
newCapacity = minimumCapacity;
}
value = Arrays.copyOf(value, newCapacity);
}