StringBuffer和StringBuilder的扩容

在没有传参的情况下默认初始容量是16。

public StringBuffer() {
        super(16);
    }

有参数的情况下,初始容量是16+字符串的长度,并且是用append()方法追加的字符

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

它是这么扩容的 int newCapacity = (value.length << 1) + 2;增加为自身长度的一倍然后再加2;这个时候如果还是放不下,那就直接扩容到它需要的长度  newCapacity = minCapacity;

 void expandCapacity(int minimumCapacity) {
        int newCapacity = value.length * 2 + 2;
        if (newCapacity - minimumCapacity < 0)
            newCapacity = minimumCapacity;
        if (newCapacity < 0) {
            if (minimumCapacity < 0) // overflow
                throw new OutOfMemoryError();
            newCapacity = Integer.MAX_VALUE;
        }
        value = Arrays.copyOf(value, newCapacity);
    }
原文地址:https://www.cnblogs.com/u013533289/p/11648545.html