2016-06-21 29 views
-4
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()); 
} 

O/P是StringBuffer的容量()

16 
20 
34 
----- 
40 
70 
----- 
40 
40 

我的问题是,在第二行中,容量应36(20 + 16)。为什么它显示为34.

+0

您的标题和标签say * StringBuffer *。你的代码说* StringBuilder *。这是什么? –

+0

相关:(如果你的意思是StringBuffer)http://stackoverflow.com/questions/8011574/what-is-the-capacity-of-a-stringbuffer?rq=1 – Thilo

回答

1

望着Javadoc中,我不认为StringBuilder指定它将如何准确地增长,但什么是最有可能的情况是,一旦它成长它调用ensureCapacity(minimumCapacity)载入文件:

新容量的较大:

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

所以你从最初的16到

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

其中最后是34.

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

+0

但在其他行添加新文本后,其为什么它的容量显示为70? –

+1

@RuchiGupta:旧容量= 34,新容量=(34 * 2)+ 2 = 70.混淆在哪里! – Ankit