Question 212
Given:
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. }
When the doSomething method is called, after which line does the
Object created in line 5 become available for garbage collection?
A. Line 5
B. Line 6
C. Line 7
D. Line 8
E. Line 9
F. Line 10
Answer: D我自己是这样想的:
在Line9处,仍然有O被使用,虽然是赋值为null的操作,但还是在使用啊,所以选择E。答案为什么会是D呢??谢谢
Given:
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. }
When the doSomething method is called, after which line does the
Object created in line 5 become available for garbage collection?
A. Line 5
B. Line 6
C. Line 7
D. Line 8
E. Line 9
F. Line 10
Answer: D我自己是这样想的:
在Line9处,仍然有O被使用,虽然是赋值为null的操作,但还是在使用啊,所以选择E。答案为什么会是D呢??谢谢
doSomethingElse(null);
这里已经让它为空了
private Object o; private void doSomethingElse(Object obj) {
o = obj;
} public void doSomething() {
//为了方便,把下面这句new出来的对象叫M
Object o = new Object(); //执行完这句,M被o引用着
doSomethingElse(o);//执行完这句,M被成员变量o和局部变量引用着
o = new Object(); //执行完这句,M被成员变量o引用着,局部变量不再引用o
doSomethingElse(null);//执行完这句,成员变量o指向null,M没有被谁引用,所以答案就是D了
o = null;
}
}