package com.atguigu.java;
/*
* 二维数组的使用
*/
public class ArrayTest03 {
public static void main(String[] args) {
//1.二维数组的声明和初始化
int[] arr=new int[] {1,2,3};//一维数组
//静态初始化
int[][] arr1=new int[][]{{1,2,3},{4,5,6},{7,8,9},{10}};
//动态初始化
//方式①
String[][] arr2=new String[3][2];
//方式②
String[][] arr3=new String[3][];
//[]的不同位置(正确的写法)
int arr4[][]=new int[][]{{1,2,3},{4,5,6},{7,8,9},{10}};
int[] arr5[]=new int[][]{{1,2,3},{4,5,6},{7,8,9},{10}};
int[] arr6[]={{1,2,3},{4,5,6},{7,8,9},{10}};//省略后的
//同样的一维数组也可省略new int[][]
int[] arr7= {7,4,1,6};//叫做:类型推断
//但是下面的情况不能省
int[] ids;
ids=new int[] {7,1,4,6};//这是正确的
( ids= {7,4,1,6};//省了就会报错)
//2.二维数组的调用
System.out.println(arr1[2][1]);
System.out.println(arr2[1][1]);
arr3[2]=new String[4];如果没有这一行代码,下面的输出语句会报错,因为在上面的数组arr3 中的第一层数组中没有元素。
System.out.println(arr3[2][0]);
这三行输出语句的结果分别为:8,null,null
//3.数组长度的获取
System.out.println(arr4.length);
System.out.println(arr4[0].length);
System.out.println(arr6[1].length);
输出的结果分别是:4,3,3
//4.遍历二维数组 需要用到嵌套for循环
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();
}
for(int i=0;i<arr6.length;i++) {
for(int j=0;j<arr6[i].length;j++) {
System.out.print(arr6[i][j]+" ");
}
System.out.println();
}
//5.二维数组的默认初始化值
* 针对初始化方式一:比如:interesting[][] arr=new int[4][3];
* 外层元素的初始化值为:地址值
* 内层元素的初始化值为:与一维数组初始化情况相同
* 针对于初始化方式二:比如:int[][] arr=new int[4][]
* 外层元素的初始化值为:null
* 内层元素的初始化值为:不能调用,否则报错
*/
int[][] arr8=new int[4][3];
System.out.println(arr8[0]);//输出的是内层数组第一个元素的地址值:[I@15db9742
地址值中的 [ 表示是一维的, I 表示是int型的,@后跟位置,即15db9742(以16进制表示的)
System.out.println(arr8[1][0]);//0
System.out.println(arr8);//结果为:[[I@6d06d69c表示的意义与上面的类比
System.out.println("****************");
float[][] arr9=new float[4][2];
System.out.println(arr9[0]);//输出的结果为:[F@7852e922
System.out.println(arr9[0][0]);//输出的结果为:0.0
System.out.println("****************");
String[][] arr10=new String[4][3];
System.out.println(arr10[0]);//输出的结果为:[Ljava.lang.String;@4e25154
System.out.println(arr10[0][0]);//输出的结果为:null
System.out.println("****************");
String[][] arr11=new String[4][];
System.out.println(arr11[1]);//输出的结果为:null
System.out.println("****************");
double[][] arr12=new String[4][];即使是double型的输出的结果也是null
System.out.println(arr12[1]);//输出的结果为:null
//
6.二维数组的内存解析