PRELOADER

当前文章 : 《StringBuffer和StringBuilder的区别》

5/5/2019 —— 

  StringBuffer和StringBuilder都是可变的字符串,都继承了一个抽象的字符串父类:AbstractStringBuilder。

线程安全

StringBuffer:线程安全,StringBuilder:线程不安全。因为StringBuffer的所有公开方法都有synchronized修饰,而 StringBuilder 并没有 synchronized 修饰。

缓冲区

StringBuffer代码toString方法:

1
2
3
4
5
6
7
8

@Override
public synchronized String toString() {
if (toStringCache == null) {
toStringCache = Arrays.copyOfRange(value, 0, count);
}
return new String(toStringCache, true);
}

StringBuilder代码toString方法:

1
2
3
4
5
@Override
public String toString() {
// Create a copy, don't share the array
return new String(value, 0, count);
}

  StringBuffer每次获取toString都会直接使用缓存区的toStringCache值来构造一个字符串。而StringBuilder则每次都需要复制一次字符数组,再构造一个字符串。

性能

  StringBuffer是线程安全的,它的所有公开方法都是同步的,StringBuilder 是没有对方法加锁同步的,所以毫无疑问,StringBuilder的性能要远大于StringBuffer。所以,StringBuffer适用于用在多线程操作同一个StringBuffer的场景,如果是单线程场合StringBuilder更适合。