Java使用什么机制来有效地检查我尝试访问的数组元素是否超出范围。我认为它可以做到的一种方法是在内存中的数组之前使用元数据。但是每次检查的if语句在时间上都是非常低效的。那它是如何实际做到的呢?
答案 0 :(得分:2)
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异常
但它实际上是如何实现的具体是实现。