一、本质
Java 没有真正的多维数组,多维数组 = 数组里存数组,属于数组的数组,每一层都是独立引用。
二、二维数组(最常用)
1. 静态初始化
// 写法1int[][]arr1={{1,2},{3,4,5},{6}};// 写法2intarr2[][]={{10,20},{30}};特点:每行长度可以不一样(不规则二维数组)。
2. 动态初始化
规则行列固定
// 3行2列int[][]arr=newint[3][2];arr[0][0]=1;只指定行数,列后期分配(不规则)
int[][]arr=newint[3][];arr[0]=newint[2];arr[1]=newint[4];arr[2]=newint[1];三、三维数组
// 2层3行4列int[][][]arr=newint[2][3][4];int[][][]a={{{1},{2}},{{3,4}}};四、遍历多维数组
1. 普通for循环(二维)
int[][]arr={{1,2},{3,4,5}};for(inti=0;i<arr.length;i++){for(intj=0;j<arr[i].length;j++){System.out.print(arr[i][j]+" ");}System.out.println();}2. 增强for循环
for(int[]row:arr){for(intnum:row){System.out.print(num+" ");}}五、长度获取
int[][]arr={{1,2},{3,4,5},{6}};arr.length;// 外层长度:行数 3arr[0].length;// 第0行的列数 2arr[1].length;// 第1行的列数 3六、复制多维数组注意点
clone()/System.arraycopy()/Arrays.copyOf只浅拷贝外层,内层数组共享地址:
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 可整块深复制。
八、常用场景
矩阵运算、表格数据、棋盘、图像像素存储等。