我今天正在处理数组,突然间我遇到了一个意外异常的情况。
如果您查看下面的代码,我认为它必须抛出public class CamelExampleTest extends CamelTestSupport {
@Override
protected RouteBuilder createRouteBuilder() throws Exception {
return new RouteBuilder() {
@Override
public void configure() throws Exception {
from("direct:startpoint").id("route1") //
.to("exec:wc?args=--words /usr/share/dict/words")//
.convertBodyTo(String.class) //
.process(new Processor() {
@Override
public void process(Exchange exchng) throws Exception {
String body = exchng.getIn().getBody(String.class);
System.out.println(body);
}
}).to("mock:endpoint");
}
};
}
@Test
public void test() throws InterruptedException {
System.out.println("running test");
MockEndpoint resultEndpoint = context.getEndpoint("mock:endpoint", MockEndpoint.class);
}
}
,但令人惊讶的是它会抛出ArrayIndexOutOfBoundsException
:
IllegalArgumentException
如果我弄错了,有人可以帮助我,让我知道吗?
答案 0 :(得分:21)
嗯,Javadoc说:
<强>抛出:强>
ArrayIndexOutOfBoundsException - 如果来自&lt; 0或来自&gt; original.length
IllegalArgumentException - 如果来自&gt;至
查看实施情况,由于IllegalArgumentException
溢出,您可以看到ArrayIndexOutOfBoundsException
例外而不是int
:
public static int[] copyOfRange(int[] original, int from, int to) {
int newLength = to - from;
if (newLength < 0)
throw new IllegalArgumentException(from + " > " + to);
int[] copy = new int[newLength];
System.arraycopy(original, from, copy, 0,
Math.min(original.length - from, newLength));
return copy;
}
此代码认为from
&gt; to
因为to-from
导致int溢出(由于from
为Integer.MIN_VALUE
),导致结果为newLength
。
答案 1 :(得分:3)
您从范围发送Integer.MIN_VALUE(-2147483648)。 你可能打算发送0而不是
答案 2 :(得分:2)
您将面临错误,因为MIN_VALUE = -2147483648 [0x80000000]为负数。或者你设置0即Arrays.copyOfRange(a, 0, 10);
。它会让你复制。
答案 3 :(得分:1)
java Docs与实现之间存在未匹配
正如Eran所说,我们可以看到由于int溢出,我们得到了一个IllegalArgumentException异常而不是ArrayIndexOutOfBoundsException。