上次我不知道看谁帖子的,还是和谁讨论的,说垃圾回收是的候选时刻是刚好没有引用指向堆中的此对象时候,但是用这个规律套这道题目好像不怎么正确?谁帮忙解释下?Question 209
Given:
11. public void genNumbers() {
12. ArrayList numbers = new ArrayList();
13. for (int i=0; i<10; i++) {
14. int value = i * ((int) Math.random());
15. Integer intObj = new Integer(value);
16. numbers.add(intObj);
17. }
18. System.out.println(numbers);
19. }
Which line of code s the earliest point that an object referenced
by intObj becomes a candidate for garbage collection?
A. Line 16
B. Line 17
C. Line 18
D. Line 19
E. The object is NOT a candidate for garbage collection.
Answer:D我感觉,既然intObj是个循环体中定义的局部引用,那么它的生命期应该旨在循环体中有效吧,那么应该选择B阿,为什么选择D呢?

解决方案 »

  1.   

    学习,不清楚,是不是intObj是个指向对象的地址变量
      

  2.   

    因为这一句numbers.add(intObj); 还有个引用指向intObj,numbers这是在19行才被标为可以回收的,所以intObj对象只有到numbers对象生命周期结束后才能被标记。答案是D,没有问题。
      

  3.   

    intObj通过这个语句numbers.add(intObj);添加到numbers里,只有numbers的状态编程可回收时,intOjb才编程可回收,所以在line 19的时候intOjb才变成可回收的。 
      

  4.   

    可是看代码,intObj状态并不依赖numbers阿。 每次循环体结束,则intObj的使命也就完成了阿,因为他是个局部变量,所以此时就没任何引用指向这个intObj了,难道不是这个时候将其标记为可回收状态么?
      

  5.   


    Which line of code s the earliest point that an object referenced 
    by intObj becomes a candidate for garbage collection? 
    题目问得是这个对象,而不是该对象的应用,对象的引用intObj确实是在17行结束后生命周期就完了,但是intObj指的对象还在被numbers引用。
      

  6.   

    哦,正确,,我吧题目理解错了。。OMG
      

  7.   

    我发现SCJP模拟题有点恶心的说,我花了2天时间自己把他们全部做完了,一共224题,虽说比较差,错了27题,不过至少有10题是由于对于题干或者题枝的理解不明确造成的,这些老外用词根本就不符合习惯阿,比如情态副词,may not,我们都是翻译成可能不,但是他却翻译成不可能。另外,强力批判下TestKiller的质量,非常差,很多错误,比如not写成hot,而且还有错误答案,比如第193题。 希望学习JAVA基础拿这个做基础测试的朋友注意下。。嘿嘿