java高频面试题StringBuffer 和 StringBuilder 的区别
前言
StringBuffer 和 StringBuilder 的区别区别详解
一、线程安全比较
StringBuilder的线程是不安全的,因为StringBuilder的方法没有被 synchronized 修饰
然而StringBuffer 的线程是安全的因为StringBuffer 公开的方法都被synchronized修饰
二、缓冲区的区别
1.StringBuffer 代码片段:
代码如下(示例):
private transient char[] toStringCache;
@Override
public synchronized String toString() {
if (toStringCache == null) {
toStringCache = Arrays.copyOfRange(value, 0, count);
}
return new String(toStringCache, true);
}
2.StringBuilder 代码片段:
代码如下(示例):
@Override
public String toString() {
// Create a copy, don't share the array
return new String(value, 0, count);
}
StringBuffer 每次获取 toString 都会直接使用缓存区的 toStringCache 值来构造一个字符串。
StringBuilder 则每次都需要复制一次字符数组,再构造一个字符串。
三、在性能方面
StringBuffer的线程是安全的,方法公开同步,对方法加锁使用,所以在使用的过程中性能相对于StringBuilder比较低
总结
由于StringBuffer线程安全所以运用于多线程情况下比较合适,这样可以保证线程的安全。如果在单线程使用StringBuilder就更加合适。