java的一道经典考题,大家来看看
Given:
12. void start() {
13. A e = new A();
14. B b = new B();
15. a.s(b);
16. b = null;
17. a = null;
18. System.out.printIn(“start completed”);
19. }
When is the B object, created in line 14, eligible for garbage collection?
A. After line 16.
B. After line 17.
C. After line 18 (when the methods ends).
D. There is no way to be absolutely certain.
E. The object is NOT eligible for garbage collection.
各位朋友觉得这道题应该选什么呢???
问题点数:5、回复次数:7Top
1 楼ggan23(事先申明:我所理解的以及我所表达的不一定是正确的,错误之处还请大家见谅和指正 ...^_^)回复于 2006-06-04 02:13:24 得分 0
书上答案是C ~~~~~~ 没搞明白啊Top
2 楼LordSimon(lordsimon@x.cn)回复于 2006-06-04 10:28:37 得分 0
15. a.s(b);
这一句是什么意思啊?没有看到a是哪个类事例化出来的啊。如果是e.s(b);的话,在下是这样理解的(当然,不一定对哦)
在line 16虽然b这个引用为null了,但由于e.s(b)这个语句又创建了一个指向b所指向的对象。于是,在b=null;后,该对象的引用计数不为0,所以不能被回收。
但方法结束后,作为方法变量的e将结束生命周期,而其中的内容将会无效,这就使原b所引用的对象的引用计数为0了,然后就可以回收了Top
3 楼ggan23(事先申明:我所理解的以及我所表达的不一定是正确的,错误之处还请大家见谅和指正 ...^_^)回复于 2006-06-04 11:02:08 得分 0
那为什么不选B啊???Top
4 楼LordSimon(lordsimon@x.cn)回复于 2006-06-04 20:38:45 得分 0
因为要方法结束才行嘛。只有C选项 表明了(when the methods ends).
Top
5 楼bandittalent()回复于 2006-06-04 21:50:39 得分 0
学习Top
6 楼supergoalcn(Supergoal)回复于 2006-06-08 11:24:13 得分 5
class C {
public static B b = null;
}
class B {}
class A {
public void s(B b) {
C.b = b;
}
}
如果是这样的话,即使函数退出了,b也不能够被回收。所以答案应该是D. There is no way to be absolutely certain.Top
7 楼mvmouse(mouse)回复于 2006-06-15 17:36:39 得分 0
同意楼上的Top




