Java Stack 保留推送元素的副本而不是对它们的引用

Kor*_*gay 1 java stack

Stack<Animal> myStack = new Stack<Animal>();
Animal a = new Animal();
a.setValueOfAnimal(5);
myStack.push(a);
a.setValueOfAnimal(15);
System.out.println(myStack.pop().getValueOfAnimal());
Run Code Online (Sandbox Code Playgroud)

在上面你会看到一个示例 main 方法。

输出将是:15。

有没有办法使堆栈中的对象安全?当我修改“Animal a”的值时,我不希望堆栈中的对象被修改。

任何内置的 Java 类都支持它吗?

Roh*_*ain 6

当我修改“Animal a”的值时,我不希望堆栈中的对象被修改。

然后你必须创建Animal.

当您在 中添加Animal引用时Stack,您只是存储引用的副本,该副本指向相同的Animal. 因此,如果您Animal使用原始引用修改您的实例,它也会针对Stack.

所以,你需要像这样修改你的代码: -

myStack.push(a);
a = new Animal(); // Make the reference `a` point to a new instance.
a.setValueOfAnimal(15);
Run Code Online (Sandbox Code Playgroud)