二维数组的使用
理解
对于二维数组,我们可以看为一对一维数组array1又作为另一个一位数组array2的存在,从数组的底层机制来看,并不存在多维数组
使用
声明和初始化
对比一维数组
一维:int[] arr = new int[]{1,2,3}(静态)
int[] arr = new int[3];(动态)
arr[0] = 1;
arr[1] = 2;
arr[2] = 3;
二维:int [][] arr2 = new int[][]{{1,2,3},{4,5,6},{7,8,9}};(静态)
int [] arr2 [] = new int[][]{{1,2,3},{4,5,6},{7,8,9}};(静态)
int [][] arr2 = new int[3][3];(半动态)
int [][] arr2 = new int[3][];(全动态①)
3*3二维数组模型
1 | 2 | 3 |
4 | 5 | 6 |
7 | 8 | 9 |
如何调用二维数组
初始化数组(静态调用)
int[]arr1 = new int [][]{{1,2,3},{4,5,6},{7,8,9}}
输出结果
System.out.println("arr1[0][1]")
运行截图
初始化数组(动态调用)
int [][]arr2 = new int[3][];
arr4[1] = new int[4];
输出结果
System.out.println("arr4[1][0]")
运行截图
由于只是为数组设置了列的个数,没有赋值,所以还是都是零的状态
获取数组的长度
初始化数组
int[][]arr3 = new int[][]{{1,2,3},{4,5,6},{7,8,9}};
获取长度
System.out.println(arr3.length);
运行截图
注意
其中数组的长度由于二维与三维在实际上都属于一维数组,长度只统计一个大括号里有几个小括号
遍历二维数组
for(int i = 0;i < arr3[i].length;i++){
for(int j = 0;j < arr3[i].length;j++){
System.out.println(arr3[i][j] + " ");
}
}
运行结果
二维数组的默认初始化值
规定:二维数组分为内外两层元素
例:
int[][] arr = new int[2][2];
外层元素:arr[0],arr[1]等
内层元素:arr[0][0],arr[1][1]
个人理解为一个整行的代表为外层元素
细看内在==(细化到哪一行哪一列)则为内层元素==
默认的初始化值只有在动态初始化数组时可见,静态时已经固定好无法窥见
代码举例:
public class ArrayTest3{
public static void main(String[]args){
int [][] arr5 = new int[4][3];
System.out.println(arr[0]);
System.out.println(arr[0][0]);
运行结果
总结
针对于下列初始化方式:
int [][] arr = new int[4][3];
他的外层元素:arr[0],arr[1];在没有赋值输出后值一般为内存地址值
内层元素:arr[0][0],arr[1][2];在没有赋值输出后值一般为0
针对另一种初始化方式:
int [][] arr = new int[4][];
外层元素:arr[0],arr[1]在没有赋值输出后值一般为null
内层元素:arr[0][0],arr[1][2]在没有赋值输出后会报错,错误原因为空指针
二维数组的内存解析
int [][] arr 1 = new int[4][];
arr1[1] = new int[]{1,2,3};
arr1[2] = new int[4];
arr1[2][1] = 30;
演示截图