一维数组合法索引范围恒为0到array.length-1;遍历时须严格匹配该闭区间,正向遍历起始i=0、终止条件i<array.length;空数组与null必须前置校验,缺一不可。

明确循环边界条件
一维数组合法索引范围恒为 0 到 array.length - 1(含两端)。遍历时必须严格匹配这个闭区间,不能依赖“大概够用”的经验判断。
- 正向遍历:起始用
i = 0,终止条件必须是i ,不是 <code> 或 <code>== - 反向遍历:起始必须是
i = array.length - 1,终止条件为i >= 0,不是从array.length开始 - 配对访问(如比较相邻元素):若写
arr[i] 和 arr[i + 1],上限应设为i ,否则最后一轮必越界
动态索引必须先校验再使用
所有非字面量下标——包括用户输入、计算结果、字符串分割后取值、取模或除法偏移等——都不能跳过合法性检查。
- 统一校验写法:
index >= 0 && index ,缺一不可(负数和超长都要防) -
split()后的数组极易出问题:空串或全分隔符会导致parts.length == 0,直接访问parts[0]必崩,需先判空再判长度 - 取模不等于安全:若
i可能为负,i % arr.length仍可能为负,应改用(i % arr.length + arr.length) % arr.length或先做非负归一
优先绕开手动索引管理
不需要显式下标时,彻底放弃索引是最省心、零成本的防御方式。
- 只读遍历一律用增强 for 循环:
for (int x : arr),JVM 自动控制范围,无越界风险 - 需要索引但想降低出错率:改用
ArrayList配合size()检查,语义更清晰;或转为 stream 操作,如IntStream.range(0, list.size()).forEach(i -> ...) - 避免在循环中混用多种索引逻辑(如外层用
i,内层用i+2),容易漏算边界
空数组与 null 值提前兜底
数组未初始化或长度为 0 是高频越界诱因,应在访问前完成基础状态确认。
- 先判
array != null,再判array.length > 0,两者缺一不可 - 函数参数传入的数组,建议在方法入口加断言或快速失败检查:
if (arr == null || arr.length == 0) throw new IllegalArgumentException("Array must be non-null and non-empty"); - 对空数组有业务含义的场景,应显式分支处理,而不是让逻辑穿透到索引访问语句

















