一、本质
Java 没有真正的多维数组,多维数组 = 数组里存数组 ,属于数组的数组,每一层都是独立引用。
二、二维数组(最常用)
1. 静态初始化
java
// 写法1
int[][] arr1 = {{1,2},{3,4,5},{6}};
// 写法2
int arr2[][] = {{10,20},{30}};
特点:每行长度可以不一样(不规则二维数组)。
2. 动态初始化
规则行列固定
java
// 3行2列
int[][] arr = new int[3][2];
arr[0][0] = 1;
只指定行数,列后期分配(不规则)
java
int[][] arr = new int[3][];
arr[0] = new int[2];
arr[1] = new int[4];
arr[2] = new int[1];
三、三维数组
java
// 2层3行4列
int[][][] arr = new int[2][3][4];
int[][][] a = {{{1},{2}},{{3,4}}};
四、遍历多维数组
1. 普通for循环(二维)
java
int[][] arr = {{1,2},{3,4,5}};
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr[i].length; j++) {
System.out.print(arr[i][j] + " ");
}
System.out.println();
}
2. 增强for循环
java
for (int[] row : arr) {
for (int num : row) {
System.out.print(num + " ");
}
}
五、长度获取
java
int[][] arr = {{1,2},{3,4,5},{6}};
arr.length; // 外层长度:行数 3
arr[0].length; // 第0行的列数 2
arr[1].length; // 第1行的列数 3
六、复制多维数组注意点
clone() / System.arraycopy() / Arrays.copyOf 只浅拷贝外层,内层数组共享地址:
java
int[][] a = {{1,2},{3,4}};
int[][] b = a.clone();
b[0][0] = 99; // a[0][0] 同步修改
想要完整深拷贝,必须双层循环逐行复制。
七、和C++多维数组核心区别
- Java 是数组套数组,每行长度可不同;C++静态多维数组内存连续,行列固定。
- Java 多维数组存堆,变量是引用;C++栈数组直接分配连续内存。
- Java 浅拷贝只复制外层引用;C++静态二维数组 memcpy 可整块深复制。
八、常用场景
矩阵运算、表格数据、棋盘、图像像素存储等。