代码:
Stack<Integer> firstStack = new Stack<Integer>();
Stack<Integer> secondStack = firstStack;
firstStack.push(1);
firstStack.push(2);
secondStack.pop();
System.out.println(firstStack.pop());
我的问题是,如果firstStack引用了Stack中的最后一个项目,而secondStack也引用了这个项目,当我从第二个Stack中弹出时,firstStack应该继续引用(前一个)最后一个项目(即2)。为什么firstStack 的引用也改变为第一项? (第一项我的意思是:1)
最佳答案
firstStack
和 secondStack
都引用堆栈本身,而不是堆栈中的最后一个对象。
当你这样做时
Stack<Integer> secondStack = firstStack;
你的意思是:获取firstStack
引用的堆栈对象,并让secondStack
引用同一个对象。没有完成堆栈复制或类似操作。
因此,如果您从 secondStack
弹出,您也会从 firstStack
弹出。
关于java - Java 如何保存对堆栈的引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13699412/