StringBuffer 和 StringBuilder

(1)
/**
* This interface represents an ordered set of characters and defines the
* methods to probe them.描述有序字符序列的接口。定义了探测这个序列的方法。
*/

public interface CharSequence 

    /**

     * Returns a {@code CharSequence} from the {@code start} index (inclusive)

     * to the {@code end} index (exclusive) of this sequence.

     *

     * @param start    注意:位于start位置的字符, 是包含在子序列中的第一个字符

     *            the start offset of the sub-sequence. It is inclusive, that

     *            is, the index of the first character that is included in the

     *            sub-sequence.

     * @param end        位于end位置的字符,是不包含在子序列中第一个字符。也就是说,只包含index是 end-1的字符

     *            the end offset of the sub-sequence. It is exclusive, that is,

     *            the index of the first character after those that are included

     *            in the sub-sequence

     * @return the requested sub-sequence.

     * @throws IndexOutOfBoundsException

     *             if {@code start < 0}, {@code end < 0}, {@code start > end},

     *             or if {@code start} or {@code end} are greater than the

     *             length of this sequence.

     */

    public CharSequence subSequence(int start, int end);

 

 

 

(2)

/**
* A modifiable {@link CharSequence sequence of characters} for use in creating
* and modifying Strings. 
* {@link StringBuffer} and {@link StringBuilder}.

*/

可变的字符序列,用于生成和修改String。 这个类的目的是作为StringBuffer和StringBuilder的基类。
abstract class AbstractStringBuilder 

 

维护一个char[] ,count = value.length() 既然value.length是自增的,为什么还要count字段。 其实count只是用于 诸如value[count++] = c; 这样的添加删除操作。

  static final int INITIAL_CAPACITY = 16;//初始大小16



  private char[] value; 



  private int count;

  private boolean shared;



    private void enlargeBuffer(int min) {

        int newCount = ((value.length >> 1) + value.length) + 2;

        char[] newData = new char[min > newCount ? min : newCount];

        System.arraycopy(value, 0, newData, 0, count);

        value = newData;

        shared = false;

    }

 

    final void appendNull() {

        int newCount = count + 4;

        if (newCount > value.length) {

            enlargeBuffer(newCount);

        }

        value[count++] = 'n';

        value[count++] = 'u';

        value[count++] = 'l';

        value[count++] = 'l';

    }

 

 

 

(3)

/**

 * A modifiable {@link CharSequence sequence of characters} for use in creating

 * strings, where all accesses are synchronized. This class has mostly been replaced

 * by {@link StringBuilder} because this synchronization is rarely useful. This

 * class is mainly used to interact with legacy APIs that expose it.

用于生成String的一个可变字符序列,所有存取操作都是同步synchronized的。通常由StringBuilder取代因为synchronization很少有用。
这个类主要用于 和它有关的遗留下来的API互通。
* <p>For particularly complex string-building needs, consider {
@link java.util.Formatter}. * * <p>The majority of the modification methods on this class return {@code * this} so that method calls can be chained together. For example: * {@code new StringBuffer("a").append("b").append("c").toString()}. * * @see CharSequence * @see Appendable * @see StringBuilder * @see String * @see String#format * @since 1.0 */ public final class StringBuffer extends AbstractStringBuilder implements Appendable, Serializable, CharSequence {

 

 

用于生成String的一个可变字符序列。作为StringBuffer的非并发使用的直接替代品。
和StringBuffer不同,这个类不是synchronized。
/**

 * A modifiable {@link CharSequence sequence of characters} for use in creating

 * strings. This class is intended as a direct replacement of

 * {@link StringBuffer} for non-concurrent use; unlike {@code StringBuffer} this

 * class is not synchronized.

 *

 * <p>For particularly complex string-building needs, consider {@link java.util.Formatter}.

 *

 * <p>The majority of the modification methods on this class return {@code

 * this} so that method calls can be chained together. For example:

 * {@code new StringBuilder("a").append("b").append("c").toString()}.

 *

 * @see CharSequence

 * @see Appendable

 * @see StringBuffer

 * @see String

 * @see String#format

 * @since 1.5

 */

public final class StringBuilder extends AbstractStringBuilder implements

        Appendable, CharSequence, Serializable {

 

比较了一下源码,StringBuffer和StringBuilder的唯一区别:

就是Override了它和StringBuilder的共同父类AbstractStringBuilder中的一些操作,使其变成synchronized方法。

而StringBuilder没有Override,直接使用的父类中的方法。

以下只是部分例子:

  @Override

    public synchronized char charAt(int index) {

        return super.charAt(index);

    }



    @Override

    public synchronized int codePointAt(int index) {

        return super.codePointAt(index);

    }



    @Override

    public synchronized int codePointBefore(int index) {

        return super.codePointBefore(index);

    }



    @Override

    public synchronized int codePointCount(int beginIndex, int endIndex) {

        return super.codePointCount(beginIndex, endIndex);

    }

 

你可能感兴趣的:(StringBuffer 和 StringBuilder)