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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 张得贵 中级黑马   /  2013-5-27 22:16  /  1225 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 张得贵 于 2013-5-28 15:09 编辑

我弄不明白sop("obj="+obj)的结果仍热可以打印出java02,毕老师所解释的是remove方法将java02的引用从集合中删除了,但是元素还在集合中,被obj使用,所以打印得出。
另外,既然元素还在集合中,为什么最后的sop(al)又打印不出java02?

Q11.jpg (47.87 KB, 下载次数: 0)

Q11.jpg

Q22.jpg (10.9 KB, 下载次数: 0)

运行结果

运行结果

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1 很给力!

查看全部评分

2 个回复

正序浏览
因为集合中存入的是对象的引用,而remove()之后,集合中确实没有这个引用了,所以sop(a1)就打印了两个引用所指向的对象。
而remove()将引用删除了,但是Object obj = it.next();表示把obj这个引用指向了java02这个对象,所以sop(obj)还是打印三个对象;
两次打印语句的打印内容不一样。。。一个是Obj一个是集合;而遍历了三次,所以,obj有三个对象值。al中的java02的引用移除,因此打印2个对象

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1 很给力!

查看全部评分

回复 使用道具 举报
obj=it.hasNext();相当于,obj=3;你这个时候打印obj的话obj是不是3???应该是的吧!
引用从集合中删除了,集合中就只存在2个引用了,那么java02自然就没有在集合中啦啊

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1 很给力!

查看全部评分

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