下述代码中,执行完语句1后,b是否会被回收?
import java.util.*;public class Stack
{
private Object[] elements;
private int size = 0;
public Stack(int initialCapacity)
{
this.elements = new Object[initialCapacity];
}
public void push(Object e)
{
ensureCapacity();
elements[size++] = e;
}
public Object pop()
{
if (size == 0)
throw new EmptyStackException();
return elements[--size];
}
private void ensureCapacity()
{
if (elements.length == size)
{
Object[] oldElements = elements;
elements = new Object[2 * elements.length + 1];
System.arraycopy(oldElements, 0, elements, 0, size);
}
} public static void main(String[] args)
{
Stack stack=new Stack(10);
Integer i=new Integer(10);
stack.push(i);
Object b=stack.pop();
b=null; /////////////////语句1
}
}
A. 可以
B. 不可以
import java.util.*;public class Stack
{
private Object[] elements;
private int size = 0;
public Stack(int initialCapacity)
{
this.elements = new Object[initialCapacity];
}
public void push(Object e)
{
ensureCapacity();
elements[size++] = e;
}
public Object pop()
{
if (size == 0)
throw new EmptyStackException();
return elements[--size];
}
private void ensureCapacity()
{
if (elements.length == size)
{
Object[] oldElements = elements;
elements = new Object[2 * elements.length + 1];
System.arraycopy(oldElements, 0, elements, 0, size);
}
} public static void main(String[] args)
{
Stack stack=new Stack(10);
Integer i=new Integer(10);
stack.push(i);
Object b=stack.pop();
b=null; /////////////////语句1
}
}
A. 可以
B. 不可以
不会回收. 题目中的b 只是指向elements对象数组的最后一个对象的引用。b=null语句只是让b不再指向那个对象了,但那个对象还在。(elements 还存在)。
比如:
Object a1,b1;
a1=new Object(); //a1 指向那个new出来的对象。
b1=a1; //b1 也指向那个对象。
b1=null; //b1不指向那个对象了,但a1还指向那个对象。所以对象不会回收。
我个人的浅见理解是这样的: 我觉得会回收原因:Object b=stack.pop();
b=null; /////////////////语句1 对象 b 失去了引用了