Java中多维数组本质是“数组的数组”,最常用二维数组,内存中为引用嵌套而非严格矩形;支持动态初始化(如int[][] m = new int[3][];)和静态初始化(如{{1,2},{3,4,5},{6}}),可不规则;访问用matrixrow,下标从0开始。

Java中多维数组本质上是“数组的数组”,最常用的是二维数组,它可看作由多个一维数组组成的数组。定义时需明确每一维的长度(尤其第一维必须指定),内存中并非严格意义上的矩形结构,而是引用的嵌套。
二维数组的声明与初始化方式
二维数组支持静态初始化(编译期确定元素)和动态初始化(运行期分配空间):
-
动态初始化:只指定行数,每行可独立分配列数
int[][] matrix = new int[3][];
matrix[0] = new int[2]; // 第1行2列
matrix[1] = new int[4]; // 第2行4列
matrix[2] = new int[3]; // 第3行3列 -
静态初始化:直接用花括号嵌套赋值,编译器自动推断维度
int[][] grid = {{1, 2}, {3, 4, 5}, {6}};
此时 grid 是不规则二维数组(每行长度不同) -
规则二维数组常用写法(行列均固定):
int[][] table = new int[4][5]; // 4行5列,所有元素默认为0
访问与遍历二维数组
通过两个下标访问元素:matrix[row][col],注意下标从0开始,越界会抛出 ArrayIndexOutOfBoundsException。
- 普通 for 循环适合需要索引的场景:
for (int i = 0; i for (int j = 0; j System.out.print(matrix[i][j] + " ");
}
System.out.println();
} - 增强 for 循环更简洁,但无法直接获取行列索引:
for (int[] row : matrix) {
for (int val : row) {
System.out.print(val + " ");
}
System.out.println();
}
常见误区与注意事项
初学者容易混淆声明语法和内存模型:
立即学习“Java免费学习笔记(深入)”;
- int[] arr[] 和 int[][] arr 等价,但推荐后者,语义更清晰
- 不能写 new int[][4] —— 第一维长度不可省略(JVM需据此分配外层数组对象)
- 二维数组变量本身是引用类型,int[][] a = b; 是引用复制,修改 b[i][j] 会影响 a[i][j]
- 使用 Arrays.deepToString(matrix) 可直观打印整个二维结构,比 toString() 有效得多
实际应用小示例:杨辉三角前5行
利用二维数组存储并生成经典结构:
- 每行首尾为1,中间元素 = 上一行左上 + 上一行正上
int[][] triangle = new int[5][];
for (int i = 0; i triangle[i] = new int[i + 1];
triangle[i][0] = triangle[i][i] = 1;
for (int j = 1; j triangle[i][j] = triangle[i-1][j-1] + triangle[i-1][j];
}
} - 打印时注意对齐,可用 String.format 控制空格,提升可读性










