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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

  1. class YinYong
  2. {       
  3.         YinYong(String name)
  4.         {
  5.                 this.name = name;
  6.         }
  7.         String name;
  8. }


  9. class ArrayDemo
  10. {
  11.         public static void main(String[] args)
  12.         {
  13.                         YinYong y = new YinYong("zhangsan");
  14.                         YinYong y1 = new YinYong("lisi");

  15.                         int[] arr = {1,2,3,4};     //这两个数组在初始化是内存是怎么分配的
  16.                         YinYong[] yin = {y,y1};

  17.         }
  18. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
袁錦泰 + 1

查看全部评分

4 个回复

倒序浏览
1,引用类型数组的数组元素是引用,因此情况变得更加复杂。每个数组元素里存储的还是引用,它指向另一块内存,这块内存里存储了有效数据,而这些数据是储存在堆里面的。当引用消失后,才被java垃圾回收机制回收。
2,而基本数组类型数在储存在栈里面的。
回复 使用道具 举报
基本数据类型是通过存放在栈中的引用变量和堆中的数组元素来存储。一个简单的内存图如下:

引用类型的数组也是通过这样的方式,不过存储在数组中的元素仍是引用类型的。
首先在栈中分别有y和y1的引用变量指向堆中的两个对象,然后有一个引用类型的数组yin 指向堆中的两块内存区域,你将y和y1指向的对象存到了该数组中,相当于yin[0]=y,yin[1]=y1;内存图:

希望这两个图能帮助楼主。

评分

参与人数 1技术分 +1 收起 理由
袁錦泰 + 1

查看全部评分

回复 使用道具 举报

当然这些在使用完成后,对应的局部main函数一出栈,那么他们之间的指向也将不存在。只能等着垃圾回收器来回收堆里边的东西。

评分

参与人数 1技术分 +1 收起 理由
袁錦泰 + 1

查看全部评分

回复 使用道具 举报

希望帮到你

1.jpg (28.59 KB, 下载次数: 110)

1.jpg

评分

参与人数 1技术分 +1 收起 理由
袁錦泰 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马