Loading

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     }

 

posted @ 2018-02-28 16:16  xpang0  阅读(357)  评论(0编辑  收藏  举报