数组索引越界异常源于未验证索引合法性;正确做法是访问前确保0 ≤ index数组索引越界异常(
arrayindexoutofboundsexception)本质是访问了不存在的位置,核心问题不在“用了索引”,而在于“没确认索引是否合法”。只要每次访问前确保 索引 ≥ 0 且 < array.length,就能避开绝大多数问题。循环边界必须用
这是最常踩的坑。Java 数组下标从 0 开始,最大有效索引是
length - 1,所以循环条件必须是i 。
- 错误写法:
for (int i = 0; i —— 当i == arr.length时直接越界- 反向遍历起点应为
arr.length - 1,不是arr.length- 嵌套循环中,内层循环上限若依赖外层变量(如
for (int j = 0; j ),要确认i不会超过当前数组长度动态索引必须显式校验,不能靠“感觉”
从用户输入、计算表达式、字符串
split()结果或外部接口拿到的索引,一律不可信,必须检查。
- 访问前加判断:
if (index >= 0 && index- 特别注意取模、除法、偏移运算:比如
arr[i / 2]在i = 0安全,但i = arr.length * 2 + 1就可能越界split()返回的数组可能长度为 0,直接取[0]必抛异常优先用不依赖索引的方式遍历
不需要下标时,就彻底绕开索引管理——这是最根本的防御。
- 只读遍历统一用增强 for 循环:
for (int x : arr),JVM 自动控制,零风险- 需要索引又想安全?改用
List配合list.size()和list.get(i),语义更清晰- 配对操作(如比较相邻元素)时,循环上限设为
arr.length - 1,不是arr.length空数组和 null 引用必须一起检查
很多人只防越界,却忘了数组引用本身可能是
null——这时报的是NullPointerException,容易误判为越界。
- 安全写法:
if (arr != null && index >= 0 && index- 更简洁可读:
Objects.nonNull(arr) && index >= 0 && index- 封装成工具方法复用,避免每处都手写重复逻辑,例如泛型版
safeGet(T[] arr, int index)返回Optional










