StringBuffer容量()

时间:2016-06-21 03:03:34

标签: java stringbuffer capacity

SingleLinkedList<E> newlist = new SingleLinkedList<E>();
 newlist.head =  temp.next; 
temp.next= null; 
return newlist

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.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。

1 个答案:

答案 0 :(得分:1)

看看Javadoc,我不认为StringBuilder指明它会如何增长,但最有可能发生的是,一旦它必须增长它就会调用ensureCapacity(minimumCapacity) 记录:

  

新容量是更大的:

     
      
  • minimumCapacity参数。
  •   
  • 旧容量的两倍,再加上2.
  •   

所以你从最初的16开始到

  • 新长度(20)
  • 或当前容量的两倍(16)加2

最终为34。

但同样,这可能是特定于实现的,而不是你应该依赖的(或需要关心的)。