(一)深入数组--内存中的数组

数组是一种引用数据类型,数组引用变量只是一个引用,数组元素和数组变量在内存里是分开存放的。实际的数组对象被存储在堆(heap)内存中,如果引用该数组对象的数组引用变量是一个局部变量,那么它被存储在栈中。数组在内存中的存储示意图:


通过一个例子来说明一下:


有这样一段代码,首先定义了两个数组a和b,分别初始化两个数组,输出数组的长度和元素,然后将a数组赋值给b数组,再输出数组b的长度。

执行结果如下:


从结果中可以看出,在初始化b数组时没有给数组b赋值,系统默认赋值为0.另外,可以看到当a数组赋值给b之后,b的长度为5,看起来似乎数组的长度发生了变化,其实这只是一个假象。

要知道:定义并初始化一个数组后,在内存中分离了两个空间,一个用户存放数组本身,另一个用于存放数组引用变量,结合例子可以知道,系统在内存中一共产生了4个内存区,其中栈内存中有两个引用变量,分别为a和b,堆内存中也有两个内存区,分别用于指向a引用和b引用所指向的数组本身。如图所示:


当执行b=a这条语句之后,系统将会把a的值赋给b,由于a和b都是引用变量,存储的都是地址,因此把a赋值给b之后,就是让b指向a所指向的地址。此时内存中的存储结构如下:


从上面的这个示意图可以看出,a和b都引用了第一个数组,此时第二个数组失去了引用,变成了垃圾,只有等待垃圾回收机制来回收,但是它的长度依然不变,直到它彻底消失。


  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值