我正在准备OCJP考试.我正在进行模拟测试.这是一段代码片段.
public class GC {
private Object o;
private void doSomethingElse(Object obj) {
o = obj;
}
public void doSomething() {
Object obj = new Object(); // Line 5
doSomethingElse(obj); // Line 6
obj = new Object(); // Line 7
doSomethingElse(null); // Line 8
obj = null; // Line 9
}
}
Run Code Online (Sandbox Code Playgroud)
调用doSomething方法后,Object obj可用于垃圾回收吗?
我知道答案是第9行,但根据考试模拟器它是第8行?我不确定谁是对的?
模拟器是对的.在第7行中,您将覆盖对实例的本地硬引用,因此第9行中的代码使第二个Object符合GC的条件.第一个符合第8行的条件.
更长的解释:
5号线:创建inst1并分配给obj
6号线:把inst1成this.o.现在有两个对inst1
第7行的硬引用:创建inst2和赋值obj.this.o仍指向inst1
第8行:清除参考this.o,inst1可用于GC
第9行:清除参考obj,inst2可用于GC
| 归档时间: |
|
| 查看次数: |
70 次 |
| 最近记录: |