i3 = null;在下面显示的类中执行时,有四个对象符合垃圾回收的条件.我添加了评论来解释我是如何得到这个答案的.我的推理是否正确?
public class Icelandic extends Horse{
public void makeNoise(){
System.out.println("vinny");
}
public static void main(String args[]){
/**
* 2 objects created
*/
Icelandic i1 = new Icelandic();
/**
* 2 objects created
*/
Icelandic i2 = new Icelandic();
/**
* 2 objects created
*/
Icelandic i3 = new Icelandic();
/**
* i3 is now pointing at i1, original Icelandic() referred to by i3 now
* has no reference - 2 objects now have no reference
*/
i3 = i1;
/**
* i3 is now pointing at i1, original Icelandic() referred to by i1 now
* has no reference - 2 objects now have no reference
*/
i1 = i2;
/**
* Total of six objects created, 4 objects no longer have a reference so 4
* can be garbage collected.
*
* Setting to null below doesn't make any difference to garbage collector
* as objects now do not have a reference
*/
i2 = null;
i3 = null;
}
}
interface Animal {
void makeNoise();
}
class Horse implements Animal{
Long weight = 1200L;
public void makeNoise() {
System.out.println("whinny");
}
}
Run Code Online (Sandbox Code Playgroud)
pra*_*p19 12
这些是您的计划的步骤:
Icelandic i1 = new Icelandic();
Icelandic i2 = new Icelandic();
Icelandic i3 = new Icelandic();
Run Code Online (Sandbox Code Playgroud)

i3 = i1;
i1 = i2;
Run Code Online (Sandbox Code Playgroud)

i2 = null;
i3 = null;
Run Code Online (Sandbox Code Playgroud)

因此,最后一个图表得出结论,只有2个对象可以进行垃圾回收.我希望我很清楚.您可以将对象名称视为对象的引用.
编辑:
正如BalusC所说,长重= 1200L也是对象.因此,i1和i3各有2个对象是合格的或垃圾收集.所以在所有4个对象都符合条件或垃圾回收.