A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黄玉昆 黑马帝   /  2013-2-8 13:25  /  1015 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 黄玉昆 于 2013-2-12 22:32 编辑

我在这里画了三张图:
我需要说明的是:
第一张:在定义一个数组的时候,如A[] a,在内存中像图中那样的分配的。仅仅是在栈内存中定义了一个引用型变量,可以说是一个指针。这个变量还没有指向任何有效的内存区。
第二张: 当new A[10]的时候,称为对a执行动态初始化,动态初始化是由系统为数组元素分配默认的初始值null的。
从图中可以看出,每个元素都是引用,且这个引用并未指向任何有效的内存,因此每个数组元素的值都是null,这就意味着依然不能直接使用A数组元素,这相当于定义了两个连续的类型为A的变量,但这个变量还未指向任何有效的内存区,

第三张:重新赋值后,会在堆内存中另外开辟新的地址空间,由数组中的每个元素的引用型变量指向新的地址空间,但是a[0]这些引用型变量的值还是null 呢,当赋值之后,A数组中的元素才会指向新的地址空间。

数组内存分配第一步.PNG (13.24 KB, 下载次数: 25)

数组内存分配第一步.PNG

数组内存分配第二步.PNG (16.46 KB, 下载次数: 27)

数组内存分配第二步.PNG

数组内存分配第三步.PNG (45.63 KB, 下载次数: 30)

数组内存分配第三步.PNG

1 个回复

倒序浏览
这有两个关于数组的文件分享给大家
下载地址:http://dl.vmall.com/c0dzrztn1t
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马