Java 不规则二维数组遍历中的空指针防御与逻辑校验实战
处理不规则二维数组时,空指针与越界异常源于未确认子数组非空便直接访问。防御关键在于先判行非空再取长,先保列范围再取值。传统循环可嵌入校验,增强循环需显式判空,按列遍历则需先确定最大列宽。
空指针和越界异常,几乎是每个Ja va开发者都会遇到的噩梦。尤其是在处理不规则二维数组时,稍不留神,代码就崩给你看。说白了,这类异常的根本原因就一条:在未确认子数组非空之前,就直接去访问它的.length或下标元素。
防御的关键不是堆砌判断语句,而是构建一条清晰的访问链条:先判行非空再取长,先保列范围再取值。就这么简单,但很多人就是忘。
遍历前,心里要过这两层坎
任何一次arr[i][j]的访问,本质上都是两次引用操作:先找arr[i],再找arr[i][j]。只要中间某一环是null,程序当场就死给你看。
- 第一层,行级校验:确保
i在[0, arr.length)范围内,并且arr[i]本身不是null。 - 第二层,列级校验:在确认当前行非空后,再检查
j是否在[0, arr[i].length)范围内。
这两层,少一个都不行。比如很多人只校验了i,却忘了arr[i]本身可能就是null;或者图省事,直接用arr[0].length代替arr[i].length,这都是在给自己埋坑。
传统for循环:稳,且可控
当需要用到索引、修改元素值,或者逻辑本身比较复杂时,传统的双层for循环仍然是首选。它的优势在于,你可以把校验逻辑直接嵌入到循环结构中:
- 外层循环只控制行数:
i < arr.length。 - 进入内层前,先用
if (arr[i] != null)把空行拦截掉。 - 内层循环的上限必须是当前行的长度:
j < arr[i].length,千万别写成固定值,或者偷懒用第一行的长度。
看看这个例子:
for (int i = 0; i < arr.length; i++) {
if (arr[i] != null) {
for (int j = 0; j < arr[i].length; j++) {
System.out.print(arr[i][j] + " ");
}
}
System.out.println();
}
逻辑清晰,每一步都踩实了,不容易出错。
增强for循环:简洁,但更敏感
for-each循环写起来确实简洁,但代价是失去了索引信息,而且对null行更敏感。使用时,必须显式处理空行,否则代码会直接抛NPE:
- 外层声明的类型必须是
int[] row,写成int x的话,后面没法用。 - 内层循环开始前,必须加一句
if (row != null),这是救命用的。 - 适合纯读取场景,因为没办法知道当前是第几行第几列。
示例代码长这样:
for (int[] row : arr) {
if (row != null) {
for (int x : row) {
System.out.print(x + " ");
}
}
System.out.println();
}
按列遍历:需要多一个心眼
不规则数组没有统一的列数,所以按列遍历不能直接套用模板。得分两步走:
- 先扫描,确定最大列宽:遍历所有非空行,记录下最大的
row.length。 - 再遍历,列主循环 + 行内校验:外层循环控制列号
c,内层循环遍历每行r,访问前务必检查arr[r] != null && c < arr[r].length。
这样做,既能保证“视觉列对齐”的输出效果,又不会因为某一行过短而意外中断或报错。这才是正确的做法。

Photoshop 2026 是 Adobe 推出的专业图像处理与视觉设计软件,支持 Windows、macOS 和 iPad 等平台,广泛应用于摄影修图、电商设计、平面海报、数字绘画及视觉合成等创作场景。
Blender 是一款免费开源、跨平台的专业 3D 创作软件,集建模、动画、渲染、视频编辑与视觉合成等功能于一体,广泛应用于影视动画、游戏设计和建筑可视化等领域。软件支持 Cycles 物理渲染器与 Eevee 实时渲染引擎,并提供多边形建模、骨骼绑定、物理模拟等专业工具。Blender 兼容 Windows、macOS 和 Linux 系统,安装包轻巧、运行流畅,依托活跃的全球开发者社区持续更新,是从初学者到专业创作者都值得选择的正版 3D 创作工具。
Photoshop 2026 是 Adobe 推出的专业图像处理与视觉设计软件,支持 Windows、macOS 和 iPad 等平台,广泛应用于摄影修图、电商设计、平面海报、数字绘画及视觉合成等创作场景。
Blender 是一款免费开源、跨平台的专业 3D 创作软件,集建模、动画、渲染、视频编辑与视觉合成等功能于一体,广泛应用于影视动画、游戏设计和建筑可视化等领域。软件支持 Cycles 物理渲染器与 Eevee 实时渲染引擎,并提供多边形建模、骨骼绑定、物理模拟等专业工具。Blender 兼容 Windows、macOS 和 Linux 系统,安装包轻巧、运行流畅,依托活跃的全球开发者社区持续更新,是从初学者到专业创作者都值得选择的正版 3D 创作工具。















