Я читаю документацию о том, как ArrayList
в Java выращены. Я не понимаю, почему метод hugeCapacity(int minCapacity)
решает вернуть либо Integer.MAX_VALUE
, либо MAX_ARRAY_SIZE
.
Из того, как MAX_ARRAY_SIZE
определяется в классе,
244 | private static final int MAX_ARRAY_SIZE = Integer.MAX_VALUE - 8;
Это почти то же самое, что и Integer.MAX_VALUE
за исключением размера одного целого (32 bits
).
264 | private static int hugeCapacity(int minCapacity) {
265 | if (minCapacity < 0) // overflow
266 | throw new OutOfMemoryError();
267 | return (minCapacity > MAX_ARRAY_SIZE) ?
268 | Integer.MAX_VALUE :
269 | MAX_ARRAY_SIZE;
270 | }
Может ли кто-нибудь сказать мне, в чем заключается тонкая разница в возвращении Integer.MAX_VALUE
против MAX_ARRAY_SIZE
? В любом случае, не следует ли OutOfMemoryError
?