Java二维数组本质是“数组的数组”,内存中为一维引用数组,每元素指向一个一维数组;声明可规则(int[][] a=new int3)或不规则(int[][] b={{1,2},{3,4,5}});遍历用双重for循环,外层控行、内层控列,不规则时需用a[i].length动态获取列数。

Java 中二维数组本质是“数组的数组”,用双重循环遍历是最基础也最常用的手段。外层循环控制行,内层循环控制列,只要理清索引关系,操作(如求和、查找、转置、修改)就水到渠成。
理解二维数组的结构与声明
二维数组在内存中不是真正的“平面表格”,而是一维数组,每个元素又是一个一维数组(即“引用”)。例如:
int[][] matrix = new int[3][4]; 表示一个 3 行 4 列的整型矩阵,matrix[0] 是第 0 行(一个长度为 4 的 int[]),matrix[0][2] 才是第 0 行第 2 列的具体数值。
声明时也可用动态初始化:
int[][] grid = { {1, 2, 3}, {4, 5}, {6, 7, 8, 9} };
注意:每行长度可不同(称为“不规则二维数组”),此时需用 grid[i].length 获取第 i 行的列数。
标准双重 for 循环遍历(适用于规则矩阵)
当所有行长度一致(如 new int[m][n]),可用固定边界遍历:
立即学习“Java免费学习笔记(深入)”;
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 外层 i 从 0 到 matrix.length - 1(行数)
- 内层 j 从 0 到 matrix[i].length - 1(当前行列数;规则时等于 n)
- 访问元素统一用 matrix[i][j]
示例:打印矩阵所有元素
for (int i = 0; i
for (int j = 0; j
System.out.print(matrix[i][j] + " ");
}
System.out.println(); // 换行
}
增强 for 循环(for-each)遍历(更简洁,适合只读或简单操作)
避免手动管理索引,代码更清晰:
- 外层遍历每一行:for (int[] row : matrix)
- 内层遍历该行每个元素:for (int val : row)
示例:计算所有元素之和
int sum = 0;
for (int[] row : matrix) {
for (int val : row) {
sum += val;
}
}
⚠️ 注意:for-each 无法直接获取行列索引;若需修改原数组(如赋新值),必须用传统 for 循环配合 matrix[i][j] 赋值。
常见操作示例:转置、查找最大值、按列求和
以 3×4 矩阵为例:
- 转置(生成新矩阵):新矩阵列为原矩阵行数,新矩阵行为原矩阵列数;transposed[j][i] = matrix[i][j]
- 找全局最大值及位置:初始化 max = matrix[0][0],用双循环比较,同时记录 maxRow = i 和 maxCol = j
- 计算每列之和:外层 j 控制列(0 到 matrix[0].length-1),内层 i 遍历行(0 到 matrix.length-1),累加 matrix[i][j]

















