防范arrayindexoutofboundsexception的核心是访问前双重校验索引:必须同时满足index≥0且index

防范一维数组中频繁发生的 ArrayIndexOutOfBoundsException,核心不是等它抛出来再处理,而是让越界根本没机会发生——所有动态索引必须在访问前完成双重校验:非负且小于长度。
动态索引必须显式校验再使用
只要下标不是写死的数字(比如 arr[0]),哪怕只经过一次加减、取模或来自 split() 结果,都要立刻检查合法性。
- 统一用 index >= 0 && index ,缺一不可——负数和超长都要防
-
String[] parts = s.split(",")后,parts.length可能为 0,直接取parts[0]必崩,得先判空 - 取模不等于安全:
arr[i % arr.length]在i为负时结果可能为负;应改用(i % arr.length + arr.length) % arr.length或先做非负处理 - 除法偏移也危险:
arr[i / 2]若i来自用户输入或累计变量,可能远超arr.length
循环边界必须严格匹配 length
绝大多数越界发生在 for 循环里,错误常藏在符号和起始点中。
- 正向遍历:条件必须是 i ,不是
或硬编码数字 - 反向遍历:起点必须是 arr.length - 1,不是
arr.length - 配对操作(如比较
arr[i]和arr[i+1]):上限设为 arr.length - 1,否则最后一轮i+1必越界
优先绕开索引,用更安全的遍历方式
不需要下标时,彻底放弃索引管理是最省心、零成本的防御。
- 只读遍历一律用增强 for 循环:
for (int x : arr),JVM 自动控制范围,无越界风险 - 需要索引又想省心?改用
ArrayList配合size()检查,语义更清晰;或用stream().forEach()避免手动索引 - 字符串处理少用
charAt(i),多用for (char c : str.toCharArray())或str.chars().forEach()
空数组和 null 引用必须同步检查
越界异常常和空指针混淆,二者要一起防。
- 数组引用本身可能是
null,此时访问arr[i]抛的是NullPointerException,不是越界异常 - 校验顺序建议:先判 null,再判 length,最后校验索引 ——
if (arr == null || index = arr.length) - 可封装泛型工具方法复用,例如
safeGet(T[] arr, int index, T defaultValue),避免重复手写逻辑











