StringBuilder和StringBuffer的区别
1.线程安全性
StringBuffer:线程安全,StringBuffer所有公开方法都是有synchronized 关键字修饰的;
StringBuilder:线程不安全,StringBuilder没有synchronized 关键字修饰
StringBuffer的append方法:
@Override
public synchronized StringBuffer append(CharSequence s, int start, int end)
{
toStringCache = null;
super.append(s, start, end);
return this;
}
@Override
public synchronized StringBuffer append(char[] str) {
toStringCache = null;
super.append(str);
return this;
}
StringBuilder的append方法:
public StringBuilder append(StringBuffer sb) {
super.append(sb);
return this;
}
@Override
public StringBuilder append(CharSequence s) {
super.append(s);
return this;
}
/**
* @throws IndexOutOfBoundsException {@inheritDoc}
*/
@Override
public StringBuilder append(CharSequence s, int start, int end) {
super.append(s, start, end);
return this;
}
@Override
public StringBuilder append(char[] str) {
super.append(str);
return this;
}
2.toString方法区别
StringBuffer的toString方法:
@Override
public synchronized String toString() {
if (toStringCache == null) {
toStringCache = Arrays.copyOfRange(value, 0, count);
}
return new String(toStringCache, true);
}
StringBuilder的方法:
@Override
public String toString() {
// Create a copy, don't share the array
return new String(value, 0, count);
}
1.StringBuffer的toString方法使用缓存区的toStringCache 的值来构造一个字符串
2.StringBuilder的toString方法是通过复制字符数组来构造一个字符串
3.性能
StringBuilder 的性能要远大于 StringBuffer,因为StringBuffer的所有公开方法都是同步的,线程更安全,但是会导致性能大大降低,StringBuilder的所有方法都不是同步的,所以StringBuilder相比较StringBuffer性能更好