黑马程序员技术交流社区

标题: 基本类型数组和引用类型数组在初始化是内存分配有区别... [打印本页]

作者: 黑马张扬    时间: 2012-6-4 18:56
标题: 基本类型数组和引用类型数组在初始化是内存分配有区别...
  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. }
复制代码

作者: 杨海波    时间: 2012-6-4 19:32
1,引用类型数组的数组元素是引用,因此情况变得更加复杂。每个数组元素里存储的还是引用,它指向另一块内存,这块内存里存储了有效数据,而这些数据是储存在堆里面的。当引用消失后,才被java垃圾回收机制回收。
2,而基本数组类型数在储存在栈里面的。
作者: 何拴绪    时间: 2012-6-5 03:13
基本数据类型是通过存放在栈中的引用变量和堆中的数组元素来存储。一个简单的内存图如下:

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

希望这两个图能帮助楼主。
作者: 李保成    时间: 2012-6-5 07:23

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

作者: 王超    时间: 2012-6-5 11:26

希望帮到你

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

1.jpg





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2