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); }