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