Java使用什么机制来有效地检查我试图访问的数组元素是否越界。我认为它可以做到的一种方式是将数组放在内存之前。但是,每次支票的if语句在时间上都是非常低效的。那它究竟是怎么做到的呢?Java如何高效地检查ArrayIndexOutOfBounds?
回答
这是非常有名的一段代码,因为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);
}
这种方法在内部调用。如下
@尼古拉,请你让我们知道甲骨文与谷歌之间的战斗是怎么做的,我很好奇。 – Abubakkar
@Abu,我只更新了一个随机链接。你可以通过谷歌搜索找到更多。 –
简单的检查会做,
int[] a = new int[2];
if (a.size >= index)
System.out.println("Item " + a[i]);
问题不在于何时启动了异常,而是JVM如何识别出尝试了非法访问(因此它可能会抛出异常)。 – SJuan76
看来,它的字面检查每个*aload
,*astore
等指令边界在JVM 7说明书中说明。
如果指数不引用由数组引用 数组的边界内,则(* ASTORE,* aload等)指令抛出 ArrayIndexOutOfBoundsException异常
但它是如何真正做的是实施具体。
- 1. Java ArrayIndexOutOfBounds
- 2. Java ArrayIndexOutOfBounds错误
- 3. Java异常ArrayIndexOutOfBounds
- 4. ArrayIndexOutOfBounds异常Java
- 5. ArrayIndexOutOfBounds Java异常
- 6. 如何检查有效的URL地址?
- 7. 高效的收敛检查
- 8. 高效检查子集
- 9. 如何高效地执行此mysql查询? (加入和检查存在)
- 10. 如何高效地存储大型Java地图?
- 11. 如何高效地使用Java从DB2数据库检索200万条记录?
- 12. 的Java /“高级”检查
- 13. 如何高效地捕获异常并检查参数是否无
- 14. 如何在PHP中高效地检查存在的存储过程
- 15. Twitter如何高效地检索用户的推文供稿?
- 16. 如何高效地从Excel文件中检索时间值?
- 17. 是否更高效地检查PHP中的空值?
- 18. 如何使用addMarker()检查地图地址是否有效?
- 19. 高效重复检查Java中多种类型的对象
- 20. Java。高效检查原始数据中的获胜条件
- 21. 如何在java中高效地访问半稀疏数据?
- 22. 如何高效地管理Java文件系统上的文件?
- 23. 如何从使用Java的套接字高效地读取NIO
- 24. 如何在Java中高效地解析200,000个XML文件?
- 25. 如何高效地删除Java中的多个会话密钥?
- 26. 如何高效地匹配java中元素的名称空间?
- 27. 如何在java中高效地读取大文本文件
- 28. 如何在Java中高效地绘制SVG图像?
- 29. 如何将Java代码高效地转换为python?
- 30. 如何从Java高效地调用Perl程序?
什么让你觉得它检查什么?访问超出界限的索引会导致异常。 –
它是否真的检查ArrayIndexOutOfBounds异常?如果是这样,为什么会得到异常? – manas
@JesseWebb问题是Java如何识别有试图访问不属于数组的索引,因此它可以抛出AIOOB异常。 – SJuan76