多维数组.
数组的元素也是数组
数组的元素是数组
1、声明和初始化.
- 数组一旦初始化长度,就确定了
//静态初始化
int[][] arr = new int[][]{{1,2},{2,3}}; // int[] arr[]
//动态初始化 1
int[][] arr = new int[2][2];// 二维数组长度固定 int[] arr[]
//动态初始化 2
int[][] arr = new int[2][];// 二维数组长度不固定 int[] arr[]
//初始化代码省略
//特殊 类型推断
int[][] num = {{1,2},{2,3,4}};
2、获取指定位值的元素.
- 通过索引获取
- 索引从 0 开始
int[][] arr1 = new int[2][2];
int[][] arr2 = new int[2][];
arr1[0][0]; // 默认值为 1
arr2[0][0]; // 抛出NullPointerException异常 因为外层数组元素没有分配空间(即外层数组arr2[0] = null;)
//处理
arr2[0] = new int[1];
arr2[0][0];
3、获取数组长度.
int[][] num = {{1,2},{2,3,4}};
int l = num[0].length + num[1].length;// 2 + 3 = 5
System.out.println(l);
4、遍历数组.
fori:
1 2 3
foreach:
1 2 3
lambda:
1 2 3
int[][] num = {{1,2},{2,3,4}};
System.out.println("fori:");
for(int i = 0; i < num.length; i++) {
for(int j = 0; j < num[i].length; j++) {
System.out.print(num[i][j] + " ");
}
System.out.println();
}
System.out.println("\nforeach:");
for(int[] ns : num) {
for(int n : ns) {
System.out.print(n + " ");
}
System.out.println();
}
5、数组元素的默认初始化值.
外层数组元素(元素是数组)默认值:[I@7852e922
内层数组元素(和数据类型有关:这里是int)默认值0
从上面可以看出 外层都是地址值
内层默认值是和数据类型有关的,整型:0,浮点型:0.0,字符型:'',bool型:false,对象:null;
int[][] num = new int[2][2];
//外层
System.out.println("外层数组元素(元素是数组)默认值:" + num[0]);
//内层
System.out.println("内层数组元素(和数据类型有关:这里是int)默认值" + num[0][0]);
//整个数组 地址值
System.out.println(num);
[[Ljava.lang.Object;@4e25154f //这里并不是默认初始化值,只是打印这个二维数组的地址值
//如果是下面这种情况
int[][] num = new int[2][];
//外层
System.out.println(num[0]); // null
//内层
System.out.println(num[0][0]); // 抛出NullPointerException异常 因为外层数组元素没有分配空间(即外层数组arr2[0] = null;)
null
Exception in thread "main" java.lang.NullPointerException
at javaSE.test.main(test.java:22)