Java 字符串缓冲区容量()
o/p为Java 字符串缓冲区容量(),java,stringbuffer,capacity,Java,Stringbuffer,Capacity,o/p为 public static void main(String args[]){ StringBuilder sb=new StringBuilder(); System.out.println(sb.capacity()); sb.append("abcabcabcabcabcabcab"); System.out.println(sb.length()); System.out.println(sb.capacity()); System
public static void main(String args[]){
StringBuilder sb=new StringBuilder();
System.out.println(sb.capacity());
sb.append("abcabcabcabcabcabcab");
System.out.println(sb.length());
System.out.println(sb.capacity());
System.out.println("-----");
sb.append("abcabcabcabcabcabcab");
System.out.println(sb.length());
System.out.println(sb.capacity());
System.out.println("-----");
sb.trimToSize();
System.out.println(sb.capacity());
System.out.println(sb.length());
}
我的问题是,在第二行中,容量应该是36(20+16)。为什么它显示为34。查看Javadoc,我不认为
StringBuilder
指定了它的具体增长方式,但最有可能发生的是,一旦它必须增长,它会调用以下文档:
新容量为以下两项中的较大者:
- 最小容量参数
- 旧容量的两倍,加上2
- 新长度(20)
- 或两倍于当前容量(16)加上2
但同样,这可能是特定于实现的,而不是您应该依赖(或需要关心)的内容。您的标题和标记显示StringBuffer。你的代码是StringBuilder。哪一个是相关的:(如果你指的是StringBuffer)但在另一行添加新文本后,它的长度变为40,现在为什么显示容量为70?@RuchiGupta:Old capacity=34,new capacity=(34*2)+2=70。哪里是混乱!
16
20
34
-----
40
70
-----
40
40