问题在于Stack类自己管理内存,所以清空对象引用,这样的操作应该是一种例外,而不是一种规范行为。 import java.util.EmptyStackException; public class Stack { private Object[] elements; private int size = 0; public void push(Object e){ ensureCapacity(); elements[size++] = e; } public Object pop(){ if(size == 0) throw new EmptyStackException(); /** 因为自己控制内存,需要释放引用 */ Object result = elements[--size]; elements[size] = null; /** 释放引用结束 */ return result; } private void ensureCapacity(){ if(elements.length == size){ Object[] oldElements = elements; elements = new Object[2*elements.length + 1]; System.arraycopy(oldElements, 0, elements, 0, size); } } }