下述代码中,执行完语句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. 不可以

解决方案 »

  1.   

    楼主很高兴回答你的问题: java中对象的销毁 被java虚拟机视为垃圾的对象主要包括两种 一种对象引用超出其作用范围 2就是 给对象赋值null 就是你题目中的   值得注意一点是垃圾回收只能回收由new创建的对象。 而且虚拟机何时回收我们程序员也不知道
      

  2.   

    个人浅见:
    不会回收. 题目中的b 只是指向elements对象数组的最后一个对象的引用。b=null语句只是让b不再指向那个对象了,但那个对象还在。(elements 还存在)。
    比如:
    Object a1,b1;
    a1=new Object();    //a1 指向那个new出来的对象。
    b1=a1;              //b1 也指向那个对象。
    b1=null;            //b1不指向那个对象了,但a1还指向那个对象。所以对象不会回收。
      

  3.   

    就想windows的消息循环,你要操作的消息命令发给windows,但是何时执行是无法确定,但是只要windows不死机消息最终会被执行。
      

  4.   


    我个人的浅见理解是这样的: 我觉得会回收原因:Object b=stack.pop();
      b=null; /////////////////语句1  对象 b 失去了引用了
      

  5.   

    那回收的也是OBJECT这个对象内存,,b又不占内存,何况b的引用是个数组内的对象。这个对象都不会回收,,