共性
- StringBuffer 和 StringBuilder 都是可变的字符串
- StringBuffer 和 StringBuilde 都继承自AbstractStringBuilder
区别
线程安全 | 缓存区 | 性能 | 场景 | |
StringBuffer | synchronized修饰,线程安全
@Override
public synchronized char charAt(int index) {
if ((index < 0) || (index >= count))
throw new StringIndexOutOfBoundsException(index);
return value[index];
} | 存在缓存区
@Override
public synchronized String toString() {
if (toStringCache == null) {
toStringCache = Arrays.copyOfRange(value, 0, count);
}
return new String(toStringCache, true);
} | 较慢 | 多线程 |
StringBuilder | 无synchronized修饰,线程不安全
@Override public StringBuilder append(String str) { super.append(str); return this; } | 不存在缓存区
@Override | 较快 | 单线程 |