2016-06-21 11 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 istStringbuffer Kapazität()

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

Meine Frage, die in der zweiten Zeile ist, sollte die Kapazität 36 (20 + 16) ist. warum zeigt es als 34.

+0

Ihr Titel und Tags sagen * StringBuffer *. Dein Code sagt * StringBuilder *. Welches ist es? –

+0

Related: (wenn Sie meinten StringBuffer) http://StackOverflow.com/Questions/8011574/what-is-the-capacity-of-a-stringbuffer?rq=1 – Thilo

Antwort

1

am Javadoc Sehen, ich glaube nicht, StringBuilder gibt an, wie genau wird es wachsen, aber was am wahrscheinlichsten ist passiert, dass, sobald es zu wachsen hat es nennt ensureCapacity(minimumCapacity) die ist dokumentiert :

die neue Kapazität ist der größere von:

  • The minimumCapacity Argument.
  • Zweimal die alte Kapazität plus 2.

So gehen Sie von den ersten 16 bis

  • die neue Länge (20)
  • oder zweimal die Stromkapazität (16) sowie 2

die bis endet als 34.

Aber wieder ist dies wahrscheinlich implementierungsspezifisch und nicht etwas, auf das Sie sich verlassen sollten (oder sich kümmern müssen).

+0

Aber nach dem Hinzufügen neuer Text in anderen Zeile, ist es Länge wird 40 und warum zeigt es Kapazität als 70? –

+1

@RuchiGupta: Alte Kapazität = 34, neue Kapazität = (34 * 2) + 2 = 70. Wo ist die Verwirrung! – Ankit

Verwandte Themen