private int newCapacity(int minCapacity) {
// overflow-conscious code
int newCapacity = (value.length << 1) + 2;
if (newCapacity - minCapacity < 0) {
newCapacity = minCapacity;
}
return (newCapacity <= 0 || MAX_ARRAY_SIZE - newCapacity < 0)
? hugeCapacity(minCapacity)
: newCapacity;
}
因大小可以传入0。
具体原因:传入0,会触发hugeCapacity(),直接就是MAX_ARRAY_SIZE = Integer.MAX_VALUE - 8的容量大小,故+2,防止这种情况。