Java常用类

StringBuffer和StringBuilder

是什么?字符串缓存区

工作原理:

  预先在内存中申请一块空间,以容纳字符序列,如果预留的空间不够用,则进行自动扩容,以容纳更多的字符序列

StringBuffer、StringBuilder和String的区别:

  String是不可变的字符序列,存储字符串常量池中

  StringBuffer底层是一个char数组,但是该数组是可变的,并且可以自动扩容

public final class StringBuffer
    extends AbstractStringBuilder
    implements java.io.Serializable, CharSequence
{

    /**
     * A cache of the last value returned by toString. Cleared
     * whenever the StringBuffer is modified.
     */
    private transient char[] toStringCache;


    /**
     * Constructs a string buffer with no characters in it and an
     * initial capacity of 16 characters.
     */
    public StringBuffer() {
        super(16);  //默认容量为16
    }


    public StringBuffer(int capacity) {
        super(capacity);
    }

  
    public StringBuffer(String str) {
        super(str.length() + 16);
        append(str);
    }
}

  StringBuilder和StringBuffer的默认容量是16

abstract class AbstractStringBuilder implements Appendable, CharSequence {
    /**
     * The value is used for character storage.
     */
    char[] value;

    /**
}

  里面是一个char数组,那么数组定好了,长度就不会变了,那么自动扩容是怎么回事?是建一个新数组,将原始数组数据拷贝过来,所以是比较耗内存耗时间的,

所以最好在创建这两个类的对象的时候预测好需要的容量,采用指定容量的方式来创建对象,为了减少数组的拷贝,提高效率。

两者区别

StringBuffer是线程安全的(源码里大多方法都用了synchronized),StringBuilder不是线程安全的

posted @ 2016-10-20 11:15  Steve_Nash  阅读(183)  评论(0编辑  收藏  举报