Java如何有效地检查ArrayIndexOutOfBounds?

时间:2012-12-17 08:11:19

标签: java arrays runtime-error runtimeexception

Java使用什么机制来有效地检查我尝试访问的数组元素是否超出范围。我认为它可以做到的一种方法是在内存中的数组之前使用元数据。但是每次检查的if语句在时间上都是非常低效的。那它是如何实际做到的呢?

3 个答案:

答案 0 :(得分:2)

由于Oracle vs Google battle:

,这是非常着名的一段代码
private static void rangeCheck(int arrayLen, int fromIndex, int toIndex) {
    if (fromIndex > toIndex)

        throw new IllegalArgumentException("fromIndex(" + fromIndex +
                   ") > toIndex(" + toIndex+")");

    if (fromIndex < 0)
        throw new ArrayIndexOutOfBoundsException(fromIndex);

    if (toIndex > arrayLen)
        throw new ArrayIndexOutOfBoundsException(toIndex);

}

此方法在内部调用。

答案 1 :(得分:0)

如下所示进行简单检查,

 int[] a = new int[2];

if (a.size >= index )
 System.out.println("Item " + a[i]);

答案 2 :(得分:0)

似乎它确实按照JVM 7规范中的描述逐字检查每个*aload*astore等指令的边界。

  

如果index不在引用的数组的范围内   通过arrayref,(* astore,* aload等)指令抛出一个   ArrayIndexOutOfBoundsException异常

但它实际上是如何实现的具体是实现。