数组。java中的copyOfRange方法引发不正确的异常
我今天正在处理数组,突然遇到了一个抛出意外异常的场景
如果您查看下面的代码,我认为它必须抛出ArrayIndexOutOfBoundsException
,但令人惊讶的是,它反而抛出了IllegalArgumentException
:
import java.util.Arrays;
public class RangeTest {
public static void main(String[] args) {
int[] a = new int[] {0,1,2,3,4,5,6,7,8,9};
int[] b = Arrays.copyOfRange(a, Integer.MIN_VALUE, 10);
// If we'll use Integer.MIN_VALUE+100 instead Integer.MIN_VALUE,
// OutOfMemoryError will be thrown
for (int k = 0; k < b.length; k++)
System.out.print(b[k] + " ");
}
}
如果我错了,谁能帮我一个忙,让我知道吗
# 1 楼答案
您将面临最小值=-2147483648[0x8000000]的错误,该值为负。u设置为0,即
Arrays.copyOfRange(a, 0, 10);
。它将允许你复制# 2 楼答案
你发送整数。最小值(-2147483648)作为起始范围。 您可能打算改为发送0
# 3 楼答案
java文档和实现之间存在不匹配
正如Eran所解释的,由于int溢出,我们得到了一个IllegalArgumentException异常,而不是ArrayIndexOutOfBoundsException异常
# 4 楼答案
好吧,Javadoc说:
查看实现,您可以看到由于
int
溢出,您得到了一个IllegalArgumentException
异常,而不是ArrayIndexOutOfBoundsException
:此代码认为
from
>to
因为to-from
导致int溢出(因为from
是Integer.MIN_VALUE
),这导致了负newLength