Java中二维数组本质是“数组的数组”,声明为int[][] matrix,支持不规则结构;通过arri访问元素,行数为arr.length,第i行列数为arr[i].length。

Java中没有真正意义上的“多维数组”,只有数组的数组——即一维数组的每个元素本身又是一个一维数组。最常用的是二维数组,本质是一维数组,其元素类型为“一维数组”。
二维数组的声明与初始化
声明时需明确类型、名称和维度(用两对方括号表示二维),但不指定大小:
-
声明方式:
int[][] matrix;或等价写法int[] matrix[];(推荐前者,更清晰) -
静态初始化:直接用大括号嵌套赋值,编译期确定结构
int[][] grid = {{1, 2}, {3, 4, 5}, {6}};
此例中每行长度可不同(称为“不规则数组”或“锯齿数组”) -
动态初始化:先分配外层数组,再逐行为内层数组分配空间
int[][] arr = new int[3][];// 3行,每行暂为空arr[0] = new int[2];arr[1] = new int[4];arr[2] = new int[1];
访问与遍历二维数组
用两个下标访问元素:arr[row][col],注意索引从0开始,且必须保证行列均在有效范围内。
- 获取行数:
arr.length - 获取第i行的列数:
arr[i].length(因每行可不等长,不能直接用arr[0].length代表全部) - 传统for循环遍历示例:
for (int i = 0; i
for (int j = 0; j
System.out.print(arr[i][j] + " ");
}
System.out.println();} - 增强for(for-each)更简洁:
for (int[] row : arr) {
for (int val : row) {
System.out.print(val + " ");
}
System.out.println();}
常见误区与注意事项
初学者易混淆语法和内存模型,导致空指针或越界异常。
立即学习“Java免费学习笔记(深入)”;
-
不能省略第一维长度:如
new int[][4]是非法的;必须写成new int[3][4]或new int[3][] -
未初始化的引用默认为null:声明
int[][] a = new int[2][];后,a[0]和a[1]均为null,直接访问a[0][0]会抛出NullPointerException - 矩形数组 ≠ 必须等长:除非显式按相同长度创建,否则 Java 不强制每行元素数量一致
- 内存布局是分散的:外层数组对象存于堆,其每个元素指向另一个堆上的独立一维数组,不是连续内存块
三维及更高维数组简述
原理相同,只是维度嵌套更深:
- 声明:
double[][][] tensor = new double[2][3][4]; - 访问:
tensor[i][j][k] - 长度获取:
tensor.length→ 第一维长度,tensor[i].length→ 第二维长度,tensor[i][j].length→ 第三维长度 - 实际开发中高维数组较少见,多数场景可用面向对象封装(如 Matrix 类)替代,提升可读性与可维护性










