即使得到正确的答案,我也无法解决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/