java
  • string
  • performance
  • stringbuffer
  • 2017-03-10 10 views 3 likes 
    3

    StringBuilder.append(String) 대신 StringBuilder.append(char)을 사용하는 것이 좋습니다 (PMD 규칙 AppendCharacterWithChar). 나는 그것에 동의한다.StringBuilder.append의 성능

    하지만 "='" 또는 "</" 같은 (짧은) 문자열을 추가하려는 경우,

    StringBuilder.append("='") 
    

    이상 (빠른)

    StringBuilder.append('=').append('\'') 
    

    더 나은 사용?

    +2

    'StringBuilder'로 전환하면보다 큰 성능 향상을 얻을 수 있습니다. –

    +1

    눈에 띄는 차이는 없습니다. StringBuilder로 전환하고 가장 읽을 수있는 버전을 사용하십시오. –

    답변

    5

    The code for the two methods is :

    public synchronized StringBuffer append(char c) { 
        toStringCache = null; 
        super.append(c); 
        return this; 
    } 
    
    public AbstractStringBuilder append(char c) { 
        ensureCapacityInternal(count + 1); 
        value[count++] = c; 
        return this; 
    } 
    

    public synchronized StringBuffer append(String str) { 
        toStringCache = null; 
        super.append(str); 
        return this; 
    } 
    
    public AbstractStringBuilder append(String str) { 
        if (str == null) 
         return appendNull(); 
        int len = str.length(); 
        ensureCapacityInternal(count + len); 
        str.getChars(0, len, value, count); 
        count += len; 
        return this; 
    } 
    

    일부 더 많은 작업이 append(String) 버전 수행하지만 사소한된다

    • 일부 널 (null) 검사;
    • 길이 검색 중.
    • 문자 범위를 복사 중입니다.

    는하지만이 정말 이상 매우 짧은 문자열, 많은 차이를 만들려고하지 않습니다.

    StringBuffer 메서드는 synchronized입니다. 과부하 중 하나를 호출하려면 StringBuffer에서 모니터를 가져와야합니다. 이것은 약간의 시간이 걸립니다 - 나는 여분의 일을 한 것보다 오래 생각했을 것입니다. append(char)으로 전화하면이 모니터를 반복적으로 구입해야합니다.

    실제 성능은 모니터와 키보드 사이의 오징어 비트입니다. 읽을 수있는 코드 작성 : append(String) 양식은 방법append(char) 양식을 계속해서 반복해서 읽는 것보다 읽기 쉽습니다.

    가능한 경우 StringBuilder을 사용하십시오. 동기화 문제가 완전히 해결되지 않습니다.

     관련 문제

    • 관련 문제 없음^_^