1.理解:
对于二维数组的理解,我们可以看成是一维数组array1又作为另一个一维数组array2的元素而存在。
其实从底层的运行机制来看,其实没有多维数组。
数组属于引用数据类型。
数组的元素也可以是引用数据类型。
2.二维数组的使用:
①二维数组的声明和初始化:
public class ArrayTest2 {
public static void main(String[] args) {
//静态初始化
int[][] arr1 = new int[][] {{1,2,3},{4,5},{6,7,8}};//二维数组
//动态初始化1
String[][] arr2 = new String[3][2];
//动态初始化2
String[][] arr3 = new String[3][];
//也是正确的:
int[] arr4[] = new int[][] {{1,2,3},{4,5},{6,7,8}};
int arr5[][] = new int[][] {{1,2,3},{4,5},{6,7,8}};
int arr6[][] = {{1,2,3},{4,5},{6,7,8}};
//错误情况:
String[2][3] arr4 = new String[][];
String[][] arr5 = new String[][2];
int[][] arr6 = new int[2][3] {{1,2,3},{4,5},{6,7,8}};
}
}
②如何调用数组的指定位置的元素:
System.out.println(arr1[0][1]);//2
System.out.println(arr2[1][1]);//null 第二行第二个元素
arr3[1] = new String[4];
System.out.println(arr3[1][0]);//null
③如何获取数组的长度:
System.out.println(arr4.length);//3
System.out.println(arr4[0].length);//3
System.out.println(arr4[1].length);//2
④如何遍历数组:
for(int i = 0;i < arr4.length;i++) {
for(int j = 0;j < arr4[i].length;j++) {
System.out.print(arr4[i][j] + " ");
}
System.out.println();
}
⑤数组元素的默认初始化值:
规定:二维数组分为外层数组的元素,内层数组的元素。
int[][] arr = new int[4][3];
外层元素:arr[0]、arr[1]...
内层元素:arr[1][2]、arr[2][2]....
针对初始化方式一:比如:int[][] arr = new int[4][3];
外层元素的初始化值为:地址值
内层元素的初始化值为:与一维数组初始化情况相同。
针对初始化方式二:比如:int[][] arr = new int[4][];
外层元素的初始化值为:null
内层元素的初始化值为:不能调用,否则报错。
举例:
public class ArrayTest3 {
public static void main(String[] args) {
int[][] arr = new int[4][3];
System.out.println(arr[0]);//[I@7852e922
System.out.println(arr[0][0]);//0
System.out.print(arr);//[[I@4e25154f
float[][] arr1 = new float[4][3];
System.out.println(arr1[0]);//地址值:[F@4e25154f
System.out.println(arr1[0][0]);//0.0
String[][] arr2 = new String[4][2];
System.out.println(arr2[1]);//地址值:[Ljava.lang.String;@70dea4e
System.out.println(arr2[1][1]);//null
double[][] arr3 = new double[4][];
System.out.println(arr3[2]);//null
System.out.println(arr3[2][1]);//报错
}
}
⑥数组的内存解析:
int[][] arr1 = new int[4][];
arr1[1] = new int[]{1,2,3};
arr1[2] = new int[4];
arr1[2][1] = 30;
解析情况:
二维数组内存解析