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
을 사용하십시오. 동기화 문제가 완전히 해결되지 않습니다.
'StringBuilder'로 전환하면보다 큰 성능 향상을 얻을 수 있습니다. –
눈에 띄는 차이는 없습니다. StringBuilder로 전환하고 가장 읽을 수있는 버전을 사용하십시오. –