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;
}
public final class StringBuilder
extends AbstractStringBuilder
implements java.io.Serializable, CharSequence {
/* ... */
@Override
public StringBuilder append(String str) {
super.append(str);
return this;
}
}
public final class StringBuffer
extends AbstractStringBuilder
implements java.io.Serializable, CharSequence {
/* ... */
@Override
public synchronized StringBuffer append(String str) {
toStringCache = null;
super.append(str);
return this;
}
}
차이점 : StringBuffer의 메서드들에는 synchronized 키워드가 붙는다. (thread-safe)
특징
단일 스레드 환경에서 synchronized 는 불필요한 연산이기 때문에 성능저하를 일으킨다.
String 클래스의 immutable 속성때문에 배열(value 변수)을 사용한 AbstractStringBuilder 가 메모리 공간 활용에 효율적이다.
(참고: https://www.baeldung.com/java-string-immutable)
(참고: http://www.simpleisbest.net/post/2013/04/24/Review-StringBuilder.aspx)