理解

对于二维数组的理解,我们可以看成是一维数组array1又作为另一个一维数组array2的元素而存在。 其实,从数组底层的运行机制来看,其实没有多维数组。


声明、初始化

静态初始化:
int[][]array = new int[][]{{1,2,3},{1,2,3,4},{1,2},{1}};
int[] array[] = new int[][]{{1,2,3},{4,5,9,10},{6,7,8}};
int[] array[] = {{1,2,3},{4,5},{6,7,8}};类型推断
特殊写法:
int[] x,y[]; x是一维数组,y是二维数组。
Java中多维数组不必都是规则矩阵形式
动态初始化:

  1. String array[][] = new String[5][3];
  2. String array[][] = new String[3][];\可只写一维

arr[0] = new int[2];
arr[1] = new int[3];
arr[2] = new int[5];
注:int[][]arr = new int[][3]; //非法


内存解析

image.png


二维数组的使用

规定:二维数组分为外层数组的元素,内层数组的元素
int[][] arr = new int[4][3];
外层元素:arr[0],arr[1]等
内层元素:arr[0][0],arr[1][2]等
注: arr仅表示一维数组地址

数组元素的默认初始化值

  • 初始化方式一:比如:int[][] arr = new int[4][3];

    外层元素的初始化值为:地址值
    内层元素的初始化值为:与一维数组初始化情况相同

  • 初始化方式二:比如:int[][] arr = new int[4][];

    1. 外层元素的初始化值为:null----->内层数组未初始化,且数组为引用数据类型<br /> 内层元素的初始化值为:不能调用,否则报错。

注:int[] x,y[]; ———>x为一维数组,y为二维数组
在给x,y变量赋值以后,x = y; 编译无法通过
原因:x为一维数组,虽说元素可为引用数据类型,但不可为数组,因为栈中不只包含地址,还包含其类型