关于Java 2学习指南中模拟试题中的问题

[复制链接]
查看11 | 回复0 | 2006-10-6 01:05:53 | 显示全部楼层 |阅读模式
大家好!
在人民邮电出版社出版的Java 2学习指南(中文版)中,第344页有一道题,我认为是错的。原题如下:
15题. Given the following,
12. void doStuff3( ) {
13. X x=new X( ) ;
14. X y=doStuff(x) ;
15. y=null ;
16. x=null ;
17. }
18. X doStuff( X mx) {
19. return doStuff2(mx) ;
20. }
at what point is the object created in line 13 eligible for garbage collection?
A. After line 15 runs
B. After line 16 runs
C. After line 17 runs
D. The object is not eligible.
E. It is not possible to know for sure.
答案: E
书上的解释是:对第13行上对象引用的一份拷贝被传递给doStuff2( )方法。我们不知道在那个方法内发生什么,该引用被传递给其他活对象是可能的。
根据以上描述的逻辑,A、B、C和D是错误的。
以下是我自己的看法:
应该选B
无论mx在doStuff2( )方法内是否传递给其他活对象,x总是引用原来的对象。这样只有在16行结束时,在13行生成的对象才符合垃圾搜集条件。
支持我想法的根据是:在本书第137页的一句话“对于对象引用,被调用方法不能重新对调用者原来的引用变量赋值,使它引用一个不同的对象或null。”
所以无论mx是否改变,x总是不变的,直到第16行结束。
如果按照原题的答案,应该把第15、16行调换。
所以这道题要么是答案错了、要么是题出错了。
以上是我自己的一点看法,不知道是否正确。请高手指点以下。
谢谢~~!!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行