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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 龚振 龚振 龚振 中级黑马   /  2012-5-4 18:46  /  1580 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

想问一下:
1这段代码总共最后是有99个局部变量o还是1个o还是?
2最后这个内存图是如何指向的,一个o指向一个new Object();其他的new Object()没有指向吗?
3v.add(o)这个方法执行是内存图是如何画的??
有点复杂,不知道有人能解答下么?
  1. Vector v=new Vector(10);
  2. for (int i=1;i<100; i++){
  3. Object o=new Object();
  4. v.add(o);
  5. o=null;
  6. }
复制代码

1 个回复

倒序浏览
1.个人认为是一个局部变量o,因为在for循环中改变的只是o的指向,即地址,变量应该只有一个。
2.因为jvm的垃圾回收机制是动态的,因此,在没有任何引用指向Object对象时,对象会被回收,释放内存。
但是关键是这些Object对象都加入到集合中了,因此集合中存放了这些对象的引用(而不是对象的实体),因此我觉得最后这些Object对象的引用(指向)都以元素形式存放在集合中。
3.add方法如上所言,是把对应的Object对象的引用加入到集合中,堆内存存放着对象实体,而集合只是添加了这些实体的引用(地址)。

以上纯属个人理解,有错误的地方请指正
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马