本帖最后由 黄玉昆 于 2013-2-12 22:32 编辑
我在这里画了三张图:
我需要说明的是:
第一张:在定义一个数组的时候,如A[] a,在内存中像图中那样的分配的。仅仅是在栈内存中定义了一个引用型变量,可以说是一个指针。这个变量还没有指向任何有效的内存区。
第二张: 当new A[10]的时候,称为对a执行动态初始化,动态初始化是由系统为数组元素分配默认的初始值null的。
从图中可以看出,每个元素都是引用,且这个引用并未指向任何有效的内存,因此每个数组元素的值都是null,这就意味着依然不能直接使用A数组元素,这相当于定义了两个连续的类型为A的变量,但这个变量还未指向任何有效的内存区,
第三张:重新赋值后,会在堆内存中另外开辟新的地址空间,由数组中的每个元素的引用型变量指向新的地址空间,但是a[0]这些引用型变量的值还是null 呢,当赋值之后,A数组中的元素才会指向新的地址空间。
|
|