java--浅显内存结构之数组
数组本身为引用数据类型
分为:一维数组 和 二维数组
一维数组:
可以理解为 将相同的数据放到一块
一维数组在内存中结构:
例如:int[] one =new int[4];
one[0]=27;
one[3]=37;
整体的内存分为以下结构:
栈:存放 局部变量 、对象的引用
堆:new出来的新东西
方法区:包括常量池 + 程序里面类名 包名 方法的定义
静态域:放静态的变量(static修饰的变量)
解析内存结构图:首先根据例子代码:
1. 定义了一个int类型的数组变量名:one (int[] one)
2.new了一个对象实体 (new int[])空间大小为4
所以在堆空间中开辟一块 存放一个空间为4的内存 (new int[4])
3.和第二步同时进行的步骤:因为定义的是int类型的数组 所以在堆中的每个元素默认值都为0
4.连接起来:int[] one = new int[4]; 此时在堆中开辟的空间的 首地址值 赋值给 栈空间变量名为one
(:也就是说栈空间中的引用变量one 的值(是地址) 指向 堆空间开辟数组内存的首地址)
5.赋值过程:one[0]=27;
将27 数值 赋值给 堆空间中开辟的地址值为0x3366 的下角标为0 的元素的默认值0 修改为 27
二维数组:
可以理解为先创建引用变量指向一个数组 数组里的每一个元素又是一个地址(可以理解为引用变量 只是此处直接存放地址值 然后指向一个新数组)
二维数组在内存中的结构:
例如:int[][] arr =new int[4][2];
int[0][1]=90;
int[2][1]=102;
解析内存结构图:
int[][] arr =new int[4][2];
1.首先int[][] arr; 定义了一个二维数组 变量名称为:arr 在内存的栈分区中开辟一个空间 存放arr这个引用变量
2.new int[4][2]
第一步创建了一个一维数组 大小为4 开辟的空间的首地址是0x2568 此一维数组存放的元素是地址(其他空间的首地址)
第二步依次对应上一步的一维数组元素 创建int类型的一维数组 将首地址值放入到上一步大的一维数组中 。 创建的int类型的一维数组 里面每个元素默认值是0
3.然后在根据
int[0][1]=90;
0就是第一步创建的那个大数组(存放其他数组首地址的)的以一个元素 然后根据那个元素里的存放的首地址值去找对应的 第二步创建的小数组
1就是第二步创建的小数组的第二个元素中值
然后从默认值0 修改为90