1.数组的内存解析:
1.1 一维数组内存解析:
(1)栈(stack)和堆(heap)结构:
- 栈(stack):局部变量;
- 堆(heap):new出来的结构:对象、数组;
①代码举例:
//举例一:(动态初始化)
int [] num = new int[4]; //动态初始化定义一个数组
//数组元素调用并赋值
num[0] = 1;
num[1] = 2;
String [] name = new String[4];
//数组元素调用并赋值
name [0] = "阿坤";
name [1] = "阿杰";
name [2] = "阿红";
- 内存解析如下:
//举例二:(静态初始化)
//int类型数组
int [] ages = new int[4]; //数组的动态初始化
ages [0] = 22;
ages [1] = 23;
ages [2] = 21;
//String类型数组
String [] names = new String []{"王涛","阿杰","张三丰","猪八戒"}; //静态初始化
//注意可以写成:String [] names = {"王涛","阿杰","张三丰","猪八戒"};
names = new String []{"孙悟空","唐僧","沙悟净"};
- 内存解析如下:
以上内存解析说明:
1.地址值是JVM中随机生成一个十六进制的数;
2.在数组元素显式赋值之前,数组元素都有默认值;
3.new之后,就是在堆空间内重新开辟一定的空间,并产生地址值;
4.失去指针所指的空间,将会在一定时间后,被垃圾回收机制所回收;
5.注意:String类型的数据其实不在堆空间内,而是在方法区的静态域中(其后会说明)
1.2 二维数组内存解析:
(二维数组实质上就可以看成是一维数组的元素任然是一维数组)
(1)堆和栈结构:
- 栈(stack):存放局部变量;
- 堆(heap):存放new出来的结构(数组、对象);
- 方法区:静态域+常量池;(其后的String类会重点说明)
②代码举例:
//举例一:
int[][] arr1 = new int[4][]; //动态初始化,定义一个二维数组
arr1[1] = new int[]{1,2,3};
arr1[2] = new int[4];
arr1[2][1] = 30;
- 内存解析如下:
//举例二:
int[][] arr1 = new int[4][];
arr1[0] = new int[3];
arr1[1] = new int[]{1,2,3};
arr1[0][2] = 5;
arr1 = new int[2][];
- 内存解析如下:
举例二:留给各位小伙伴来补充~~~~~~~~~~~~~~~~~~~