java二维数组本质是一维数组的数组,声明推荐int[][] matrix;可动态创建规则或不规则数组,静态初始化自动推断行列,遍历需嵌套循环并用array.length和array[i].length控制边界。

Java 二维数组本质是“一维数组的数组”,声明和初始化方式灵活,遍历必须靠嵌套循环,关键在于理解 length 的层级含义——数组名.length 是行数,数组名[i].length 是第 i 行的列数。
声明方式:推荐用 [][] 放类型后
标准写法是 数据类型[][] 数组名,比如:
-
int[][] matrix;—— 仅声明,未分配内存 -
String[][] names = new String[2][];—— 动态声明 2 行,每行长度待定(不规则数组) -
double[][] data = new double[3][4];—— 创建 3×4 的规则二维数组,所有元素自动初始化为 0.0
注意:int[] arr[] 或 int arr[][] 虽语法合法,但不符合 Java 编码规范,易读性差,不建议使用。
初始化分两类:静态赋值 vs 动态指定
静态初始化适合已知全部元素值的场景,系统自动推断行列大小:
-
int[][] grid = {{1, 2}, {3, 4, 5}, {6}};—— 每行长度可不同,共 3 行 -
String[][] team = new String[][]{{"A", "B"}, {"C"}};—— 等价于上一行,但声明与初始化分离
动态初始化适合运行时确定结构的场景:
- 规则数组:
char[][] board = new char[8][8]; - 不规则数组:
int[][] jagged = new int[3][];,再逐行分配:jagged[0] = new int[2]; jagged[1] = new int[5];
遍历核心:外层控行,内层控列
无论数组是否规则,安全遍历都依赖两个 length:
- 外层循环上限用
数组名.length(总行数) - 内层循环上限用
数组名[i].length(当前行元素个数)
示例代码:
for (int i = 0; i
<p>增强 for 循环更简洁:</p>
<pre class="brush:java;toolbar:false;">for (int[] row : matrix) {
for (int num : row) {
System.out.print(num + "\t");
}
System.out.println();
}
常见坑点与注意事项
初学者容易出错的地方集中在三处:
- 误把
matrix.length当作总元素个数(实际是行数),导致越界或漏遍历 - 对不规则数组用固定列数循环,比如
for (j = 0; j ,而某行只有 3 个元素,会抛 <code>ArrayIndexOutOfBoundsException - 声明后未初始化就访问,如
int[][] a = new int[2][];,此时a[0]是null,直接访问a[0][0]报空指针异常
打印调试时建议先检查 matrix.length 和各 matrix[i].length 值,确认结构再遍历。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











