2016-06-21 1 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 estcapacité StringBuffer()

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

Ma question est que, dans la deuxième ligne, la capacité doit être 36 (20 + 16). pourquoi est-il montre que 34.

+0

Votre titre et vos tags disent * StringBuffer *. Votre code indique * StringBuilder *. Lequel est-ce? –

+0

Connexe: (si vous avez voulu dire StringBuffer) http://stackoverflow.com/questions/8011574/what-is-the-capacity-of-a-stringbuffer?rq=1 – Thilo

Répondre

1

En regardant le Javadoc, je ne pense pas StringBuilder précise comment il se développera exactement, mais ce qui est le plus probable est que se passe une fois qu'il doit se développer appelle ensureCapacity(minimumCapacity) qui est documentée :

la nouvelle capacité est la plus grande:

  • l'argument minimumCapacity.
  • deux fois l'ancienne capacité, plus 2.

Alors vous allez du 16 initial à

  • la nouvelle longueur (20)
  • ou deux fois la capacité actuelle (16) ainsi que 2

qui finit par être 34.

Mais encore une fois, ceci est probablement spécifique à la mise en œuvre et ne devrait pas dépendre de quelque chose (ou dont vous devez vous préoccuper).

+0

Mais après avoir ajouté un nouveau texte dans une autre ligne, son la longueur devient 40 et maintenant pourquoi montre-t-elle une capacité de 70? –

+1

@RuchiGupta: Ancienne capacité = 34, nouvelle capacité = (34 * 2) + 2 = 70. Où est la confusion! – Ankit