通过本篇文章,你可以了解到StringBuffer与StringBuilder的区别。
String 不可变
内部数据是由final 修饰的
1 | public final class String |
StringBuffer vs StringBuilder 均可变
StringBuffer 和 StringBuilder 都是继承AbstractStringBuilder。
1 | abstract class AbstractStringBuilder implements Appendable, CharSequence { |
线程安全性
- StringBuffer 是线程安全的 使用synchronized 修饰了函数
- StringBuilder 没有用synchronized修饰,是非线程安全的
数据修改
StringBuffer 每次都是对原有对象的引用修改
1
2
3
4
5
6
7@Override
public synchronized String toString() {
if (toStringCache == null) {
toStringCache = Arrays.copyOfRange(value, 0, count);
}
return new String(toStringCache, true);
}StringBuilder 每次都是创建一个新的对象
1
2
3
4
5@Override
public String toString() {
// Create a copy, don't share the array
return new String(value, 0, count);
}
性能
相比之下 StringBuilder要比StringBuffer快,但是有线程不安全