考虑这个示例代码:
1. public class GC {
2. private Object o;
3. private void doSomethingElse(Object obj) { o = obj; }
4. public void doSomething() {
5. Object o = new Object();
6. doSomethingElse(o);
7. o = new Object();
8. doSomethingElse(null);
9. o = null;
10. }
11. }
当调用 doSomething 方法时,第 5 行中创建的 Object 在哪一行之后可用于垃圾回收?
A. 5号线
B. 6号线
C. 7号线
D、8号线
E. 9号线
F. 10 号线
答案:D
为什么D?确实,当执行第 6 行时,在第 5 行中创建的对象现在由实例 var o 和本地 var o 引用,而当执行第 8 行时,对象现在仅由本地 ref var o 引用,所以为什么答案是 D,执行第 9 行后会发生什么?谢谢。