2016-06-21 4 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)를해야한다고이다. 왜 내가 StringBuilder을 생각하지 않는다, Javadoc을 보면 34

+0

제목 및 태그는 * StringBuffer *라고 말합니다. 귀하의 코드는 * StringBuilder *라고 말합니다. 무엇 이니? –

+0

관련 : (당신이 StringBuffer를 뜻한다면) http://stackoverflow.com/questions/8011574/what-is-the-capacity-of-a-stringbuffer?rq=1 – Thilo

답변

1

으로 보여주는 것은 성장하는 방법을 정확하게 지정,하지만 가장 가능성이 일어나고있는 것은이 번이 설명되어 있습니다 ensureCapacity(minimumCapacity)를 호출 성장이다 :

  • minimumCapacity 인수 :

    새로운 용량의 크다.

  • 용량의 2 배가 플러스

2. 그래서 당신은

  • 에 초기 16에서 이동 새 길이 (20)
  • 또는 두 배의 전류 용량 (16) 플러스 끝나는 2

34.

다시 말하지만, 이것은 구현에 따라 다르며 의존해야하는 (또는 신경 써야 할) 것이 아닙니다.

+0

그러나 다른 줄에 새 텍스트를 추가 한 후에는 길이가 40이되고 왜 용량이 70으로 표시됩니까? –

+1

@RuchiGupta : 기존 용량 = 34, 새 용량 = (34 * 2) + 2 = 70. 혼동은 어디에서 발생합니까? – Ankit