可变性
String 不可变,是由定义final的字符数组实现的
/* The value is used for character storage. /
private final char value[];StringBuffer、StringBuilder均可变,是由定义了临时数据transient的字符数组实现的
/**
* A cache of the last value returned by toString. Cleared
* whenever the StringBuffer is modified.
*/
private transient char[] toStringCache;
是否线程安全
- String 对象不可变,即不可变对象永远是线程安全的
StringBuffer对方法加了同步锁synchronized,所以是线程安全的,比如获取其长度
@Override
public synchronized int length() {
return count;
}StringBuilder并没有对方法加同步锁synchronized,所以是非线程安全的,比如添加字符
@Override
public StringBuilder append(String str) {
super.append(str);
return this;
}
String,StringBuffer,StringBuilder区别是什么?
最新推荐文章于 2024-04-21 12:57:26 发布