StringBuffer与StringBuilder的区别比较
关于AbstractStringBuilder
首先通过查看源码发现,StringBuffer与StringBuilder都继承自AbstractStringBuilder抽象类。而AbstractStringBuilder类又实现了Appendable, CharSequence两个接口。这两个接口主要是实现可扩展和序列化。
public final class StringBuffer extends AbstractStringBuilder implements java.io.Serializable, CharSequence {
public final class StringBuilder extends AbstractStringBuilder implements java.io.Serializable, CharSequence {
关于StringBuffer和StringBuilder
通过查看StringBuffer部分源码,发现StringBuffer中的方法都采取了synchronized关键字,即方法都是采取线程锁的方式。而这些是StringBuilder所没有的,所以StringBuffer是线程安全的,但StringBuilder不是。同时,在大部分情况下StringBuilder的速度要快于StringBuffer。
1 @Override 2 public synchronized void setLength(int newLength) { 3 toStringCache = null; 4 super.setLength(newLength); 5 } 6 7 /** 8 * @throws IndexOutOfBoundsException {@inheritDoc} 9 * @see #length() 10 */ 11 @Override 12 public synchronized char charAt(int index) { 13 if ((index < 0) || (index >= count)) 14 throw new StringIndexOutOfBoundsException(index); 15 return value[index]; 16 } 17 18 /** 19 * @since 1.5 20 */ 21 @Override 22 public synchronized int codePointAt(int index) { 23 return super.codePointAt(index); 24 }