码:
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属性。因此,您将获得一致的结果。