java二维数组本质是“数组的数组”,需区分静态初始化(如{{1,2},{3}})与动态初始化(如new int3),遍历时须判空并用嵌套for循环,推荐arrays.deeptostring调试。

Java二维数组的遍历与初始化并不难,关键在于理解其“数组的数组”本质——外层数组存的是一维数组的引用,内层数组才真正存数据。选对方式,既能提升可读性,也能避免空指针或越界异常。
静态初始化:适合已知全部数据的场景
当元素值在编译期就确定,推荐用花括号直接初始化,代码简洁且不易出错。
- 标准写法:int[][] grid = {{1, 2, 3}, {4, 5}, {6, 7, 8, 9}}; —— 支持不规则结构(每行长度可不同)
- 声明与初始化可分离:int[][] arr; arr = new int[][]{{10, 20}, {30}};(注意不能写成 arr = {{10,20},{30}};,会编译失败)
- 每行单独换行书写,大幅提升可维护性,尤其适合配置类数据或测试用例
动态初始化:适用于运行时确定结构或需默认值的场景
分两种典型用法:规则矩阵和不规则结构,区别在于第二维是否统一指定。
- 规则二维数组:int[][] board = new int[4][4]; —— 创建4×4整型矩阵,所有元素自动初始化为0
- 不规则二维数组:String[][] names = new String[3][];,再逐行赋值:names[0] = new String[]{"Alice", "Bob"};、names[1] = new String[]{"Charlie"};
- 注意:未显式初始化的行(如 names[2])仍为 null,遍历时必须判空,否则触发 NullPointerException
嵌套for循环遍历:最通用、最可控的方式
这是处理任意二维数组(包括不规则结构)的安全选择,能精确控制索引与逻辑。
- 外层循环控制行:i (获取有多少个一维数组)
- 内层循环控制列:j (获取当前行有多少元素)
- 务必先检查 arr[i] != null 再访问 arr[i].length,防止空指针
- 示例中常配合业务逻辑,如统计每行和、查找最大值、填充坐标映射等
辅助工具与注意事项
日常开发中,善用JDK工具类和编码习惯,能显著减少低级错误。
- Arrays.deepToString(arr) 可直接打印二维数组内容,调试时比手动遍历快得多
- 避免直接 System.out.println(arr) —— 输出的是哈希码,毫无意义
- 访问单个元素始终用 arr[row][col],注意行列索引从0开始,且 row 超出 arr.length 或 col 超出 arr[row].length 均抛 ArrayIndexOutOfBoundsException
- 若业务允许,优先使用 List
- >
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











