84669 Lernen von Personen
152542 Lernen von Personen
20005 Lernen von Personen
5487 Lernen von Personen
7821 Lernen von Personen
359900 Lernen von Personen
3350 Lernen von Personen
180660 Lernen von Personen
48569 Lernen von Personen
18603 Lernen von Personen
40936 Lernen von Personen
1549 Lernen von Personen
1183 Lernen von Personen
32909 Lernen von Personen
StringBuffer str=new StringBuffer(); StringBuffer str1=new StringBuffer(3); System.out.println(str.capacity()); //16 System.out.println(str1.capacity()); //8为什么str1.capacity的结果是8?
认证高级PHP讲师
你可能搞错了,输出结果应该是:
16 3
瞧瞧源码:
// minimumCapacity是当前已经存储的字符长度+要追加的字符长度 // value.length 是当前容量 // 所以新容量=max(2*旧容量+2,追加后的字符长度) void expandCapacity(int 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.copyOf(value, newCapacity); }
只是在追加的时候会扩展容量,初始化时除了默认是16外,设多少就是多少。
给你看JDK 1.8中的构造方法: StringBuffer的两个构造方法,继承自父类的构造方法AbstractStringBuilder: public StringBuffer() { super(16); } public StringBuffer(int capacity) { super(capacity); } AbstractStringBuilder的构造方法: AbstractStringBuilder(int capacity) { value = new char[capacity]; }
这里运行看看 Java在线编译执行 运行环境: java v1.7.0_80
你可能搞错了,输出结果应该是:
瞧瞧源码:
只是在追加的时候会扩展容量,初始化时除了默认是16外,设多少就是多少。
这里运行看看 Java在线编译执行 运行环境: java v1.7.0_80