当前位置:  开发笔记 > 编程语言 > 正文

java中的Arrays.copyOfRange方法抛出不正确的异常

如何解决《java中的Arrays.copyOfRange方法抛出不正确的异常》经验,为你挑选了1个好方法。

我今天在阵列上工作,突然间我遇到了一个抛出意外异常的场景.

如果你看下面的代码,我认为它必须抛出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> Eran..:

那么,Javadoc说:

抛出:

ArrayIndexOutOfBoundsException - 如果来自<0或from> original.length

IllegalArgumentException - 如果从>到

纵观实现,你可以看到你有一个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> to因为to-from导致int溢出(由于from存在Integer.MIN_VALUE),导致负面newLength.


@ShowStopper为什么你会把负面的`from`传递给那个方法?你不应该捕获可以防止被抛出的异常.
推荐阅读
个性2402852463
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有