Java语言中,由于把二维数组看作是数组的数组
你定义的是二维数组其结构如图int a1[][] = new int[3][];这句明确了有三个引用指向数组,但数组长度没确定系统默认引用为空指针所以a1[0]为null
如果int a1[][] = new int[3][3];则系统会默认初始化存储值为0
int a2[][] = new int[3][3];虽然系统会默认初始化但a2[0]是地址指向,打印出的是地址值
要取出并打印二维数组的存储只必须用a[1][2]这样的类型
一个二维数组
int a2[][] = new int[3][3];
由于这时数组已清楚的new出了具体的大小,这是一个3*3的二维数组。在二维数组中,每一行的行标:如a2[1],它的值为二维数组第二行的第一个元素的内存地址即a2[1][0]的地址。这时的a2[0]其实保存的是a2[0][0]的内存地址,所以System.out.println(a2[0]);输出的是地址。
int a1[][] = new int[3][];
二维数组可以理解为一维数组的一个集合,这句代码相当于申明了一个包含三个一维数组的二维数组,但是这三个一维数组却没有确定大小,那他们就没有初始化。按上面的解释,a1[0]现在保存的是a1[0][0]的内存值,但是由于没有初始化,a1[0][0]不存在,所以
System.out.println(a1[0]);
会输出null.
我们也可以System.out.println(a1[0][0]);会发现有空指针异常,也验证我们的结论,这时由于数组没有初始化完成。a1[0][0]根本就不存在。