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

猜你喜欢

转载自blog.csdn.net/Taylor_Ocean/article/details/82347707