StringBuffer
StringBuffer是由synchronized修饰的,线程安全,比较适合用于多线程对同一个StringBuffer操作的场景。
StringBuffer
类的声明:
public final class StringBuffer
extends AbstractStringBuilder
implements java.io.Serializable, CharSequence
{
类的成员变量
private transient char[] toStringCache;
//继承自 AbstractStringBuilder
char[] value;
int count;
类的方法
StrngBuffer的所有方法都有synchronized修饰;
toString()方法
StringBuffer每次获取toString 都会直接使用缓存区的toStringCache值来构造一个字符串。
public synchronized String toString() {
if (toStringCache == null) {
toStringCache = Arrays.copyOfRange(value, 0, count);
}
return new String(toStringCache, true);
}
StringBuffer和StringBuilder的类结构
StringBuilder
类的方法
StringBuilder的方法相较于StringBuffer去掉了synchronized
toString()方法
StringBuilder每次获取toString()都要复制一次字符数组,在构造一个字符串。
public String toString() {
// Create a copy, don't share the array
return new String(value, 0, count);
}
总结
StringBuffer是线程安全的,他的所有公开方法都是同步的。
StringBuilder是线程不安全的,没有synchronized修饰。
StringBuilder的效率远大于StringBuffer,但是StringBuilder只适合用于单线程的场景下,而StringBuffer适用于多线程操作同一个StringBuffer对象。
版权声明:本文为weixin_44526589原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。