StringBuffer和StringBuilder区别?

一. 线程安全

StringBuffer:线程安全,StringBuilder:线程不安全

因为 StringBuffer 所有公开方法都是 synchronized 修饰的,而 StringBuilder 没有

1.1 StringBuffer

public synchronized StringBuffer append(StringBuffer sb) {
    this.toStringCache = null;
    super.append(sb);
    return this;
}

1.2 StringBuilder

public StringBuilder append(StringBuffer sb) {
    super.append(sb);
    return this;
}

二. 性能

由于 StringBuffer 的方法都是同步的,它在执行时可能会引起线程阻塞,所以性能上可能会不如 StringBuilder 。而 StringBuilder 不需要进行同步处理,因此性能通常会比 StringBuffer 更好。

三. 作用领域

总的来说,在单线程环境中,StringBuilder 更适合使用,因为它更轻量且性能更好。在多线程环境中,如果需要线程安全,可以使用 StringBuffer,但如果不需要线程安全,则同样可以使用 StringBuilder 以获得更好的性能。