码:

    Stack<Integer> firstStack = new Stack<Integer>();
    Stack<Integer> secondStack = firstStack;

    firstStack.push(1);
    firstStack.push(2);

    secondStack.pop();
    System.out.println(firstStack.pop());


我的问题是,如果firstStack引用了堆栈中的最后一个项目,而secondStack也引用了该项目,那么当我从secondStack弹出时,firstStack应该继续引用(上一个)最后一个项目(即2)。 firstStack的引用也如何更改为第一项? (第一项,我的意思是:1)

最佳答案

实际上,java中的堆栈是使用Vector类实现的。

Vector类具有以下属性(您可以通过查看Vector类的实现来进行交叉检查)

   protected Object elementData[];
   protected int elementCount;
   protected int capacityIncrement;


因此,它在内部将数据存储在数组中,并且还使用其他2个clas属性来跟踪增量和计数。因此,在内部,您的firstStack和secondStack引用指向相同的elementData,elementCount和CapacityIncrement属性。因此,您将获得一致的结果。

10-07 12:12