我正在阅读Java中的ArrayList
如何增长的文档。我不理解为什么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位
)。
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
,对吧?