即使得到正确的答案,我也无法解决SCJP问题:

从以下代码(源代码:http://scjptest.com)中,我们需要确定何时引用为myInt的对象才有资格进行垃圾回收:

01.public void doStuff() {
02.    Integer arr[] = new Integer[5];
03.    for (int i = 0; i < arr.length; i++) {
04.        Integer myInt = new Integer(i);
05.        arr[i] = myInt;
06.    }
07.    System.out.println("end");
08.}

答案表明,它符合第6行中的GC条件。但是,我认为该对象直到第7行之后才具有GC资格。因为,被引用为myInt的对象也称为arr [i]。因此,您不认为,因为在myInt超出范围之后,arr []直到第8行仍对它有引用?

最佳答案

arr[i] = myInt创建对new Integer(i)的引用的副本,而不是对myInt的引用;因此,严格要求myInt在分配后不存在。

关于java - SCJP问题要弄清楚何时收集垃圾?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5515050/

10-12 00:41