1. public class X (
2. public object m () {
3. object o = new float (3.14F);
4. object [] oa = new object [1];
5. oa[0]= o;
6. o = null;
7. return oa[0];
8. }
9. }
When is the float object created in line 3, eligible for garbage collection?
A. Just after line 5
B. Just after line 6
C. Just after line 7 (that is, as the method returns)
D. Never in this method.
我觉得答案应该是B,大家说说应该选那个?
2. public object m () {
3. object o = new float (3.14F);
4. object [] oa = new object [1];
5. oa[0]= o;
6. o = null;
7. return oa[0];
8. }
9. }
When is the float object created in line 3, eligible for garbage collection?
A. Just after line 5
B. Just after line 6
C. Just after line 7 (that is, as the method returns)
D. Never in this method.
我觉得答案应该是B,大家说说应该选那个?
因为 oa[0]= o;
所以o指向的对象new float (3.14F)的引用赋给了oa[0]
所以,没有垃圾
创建的o变量是在栈内存中的
java垃圾回收的对象是堆内存
也就是用new生成的对象o = null;
这句话只是让o丢失了原来指向堆内存的引用而已
而o本身并不是垃圾回收的对象
o = null;
之前,执行了
oa[0]= o;
也就是o之前的引用给了oa[0]
所以没有垃圾
如果注释掉第5行,即oa[0]=o,直接执行了o=null;此时是不是应该选择B