StringBuffer的capacity()方法

StringBuffer str=new StringBuffer;
StringBuffer str1=new StringBuffer3;
System.out.printlnstr.capacity; //16
System.out.printlnstr1.capacity; //8
为什么str1.capacity的结果是8?

你可能搞错了,输出结果应该是:

16
3

瞧瞧源码:

 // minimumCapacity是当前已经存储的字符长度+要追加的字符长度 // value.length 是当前容量 // 所以新容量=max2*旧容量+2,追加后的字符长度 void expandCapacityint minimumCapacity { int newCapacity = value.length * 2 + 2; if newCapacity - minimumCapacity < 0 newCapacity = minimumCapacity; if newCapacity < 0 { if minimumCapacity < 0 // overflow throw new OutOfMemoryError; newCapacity = Integer.MAX_VALUE; } value = Arrays.copyOfvalue, newCapacity; }

只是在追加的时候会扩展容量,初始化时除了默认是16外,设多少就是多少。

给你看JDK 1.8中的构造方法:
StringBuffer的两个构造方法,继承自父类的构造方法AbstractStringBuilder:
public StringBuffer { super16;
}
public StringBufferint capacity { supercapacity;
}
AbstractStringBuilder的构造方法:
AbstractStringBuilderint capacity { value = new char[capacity];
} 

这里运行看看 Java在线编译执行 运行环境: java v1.7.0_80

发表评论

电子邮件地址不会被公开。 必填项已用*标注