目录
二维数组 初始化值
二维数组内存解析
int arr1 = new int4;
arr1[1] = new int[]{1,2,3};
arr1[2] = new int[4]
arr12 = 30;
二维数组 初始化值
二维数组的使用:
- 规定:二维数组分为外层数组的元素,内层数组的元素
- int arr = new int4;
- 外层元素:arr[0],arr[1]等
- 内层元素:arr 0 ,arr1等
- 数组元素的默认初始化值
- 针对于初始化方式一:比如:int arr = new int4;
- 外层元素的初始化值为:地址值
- 内层元素的初始化值为:与一维数组初始化情况相同
针对于初始化方式二:比如:int arr = new int4;
外层元素的初始化值为:null
内层元素的初始化值为:不能调用,否则报错。
public class ArrayTest3 {
public static void main(String[] args) {
int[][] arr = new int[4][3];
System.out.println(arr[0]);//[I@15db9742
//[I@15db9742 [表示数组是一维的,@后面就是地址值
System.out.println(arr[0][0]);//0
System.out.println(arr);//[[I@6d06d69c
//[[I@6d06d69c [[表示数组是二维数组,@后面是地址值
System.out.println("*****************");
float[][] arr1 = new float[4][3];
System.out.println(arr1[0]);//地址值
System.out.println(arr1[0][0]);//0.0
System.out.println("*****************");
String[][] arr2 = new String[4][2];
System.out.println(arr2[1]);//地址值
System.out.println(arr2[1][1]);//null
System.out.println("*****************");
double[][] arr3 = new double[4][];
System.out.println(arr3[1]);//null
// System.out.println(arr3[1][0]);//报错
}
}
二维数组内存解析
内存的简化结构
二维数组内存解析
int arr1 = new int4;
局部变量arr1入栈
new int4 在堆里开辟长度为4的二维数组,同时会有地址值0X1234
同时把地址值赋值给栈中局部变量arr1;
变量arr1指向堆中地址值为0X1234二维数组对象arr1
此时arr[0]的数值取决于arr1[0]元素的类型
而arr1[0]元素的类型为int型的一维数组,而且定义的时候是int4,并没有给内层元素的赋值,此时arr[0]的数值为null。
arr1[1] = new int[]{1,2,3};
通过栈中arr1变量找到堆中arr1[1]元素,因为没有对arr1[]进行初始化,所以arr1[0],arr1[1],arr1[2],arr1[3]都是null,
arr1[1] = new int[]{1,2,3};语句对arr1[1]进行初始化,
new int[]{1,2,3}在堆空间开辟长度是3的一维数组,地址值为0X7788,同时把地址值赋值给arr1[1]元素,赋值之前arr1[1]的值为null,赋值之后为0X7788,arr1[1]指向地址值为0X7788一维数组对象,此时地址为0X7788一维数组对象的元素为int类型,如果是动态初始化值就是0,但是语句采用静态初始化(数组的初始化和数组元素的赋值操作同时进行),所以地址为0X7788一维数组对象的第一个元素为1,第二个元素为2,第三个元素为3;
arr1[2] = new int[4]
同理,在堆空间中开辟长度是4的一维数组,地址值为0X6677,同时把地址值赋值给arr1[2]元素,赋值之前arr1[2]的值为null,赋值之后为0X6677,arr1[2]指向地址值为0X6677的一维数组对象,此时地址为0X6677一维数组对象的元素为int类型,语句才用的是动态初始化(数组的初始化和数组元素的赋值操作分开进行),所以地址为0X6677一维数组对象的第一个元素为0,第二个元素为0,第三个元素为0;
arr12 = 30;
先找到栈中局部变量arr1,通过arr1找到堆空间中地址值0X1234的二维数组arr1,通过arr1[2]角标找到,地址值为0X6677的一维数组对象,通过角标arr12 找到元素,把30赋值给元素。
语句执行完之后,就会退出方法,方法结束后,栈中局部变量arr1就会出栈,变量arr1出栈之后,堆空间里所有数组都会被回收