gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 06:55:12 25 4
gpt4 key购买 nike

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());

上面您看到了一个示例 main 方法。

输出将为:15。

有什么办法可以保证堆栈中的对象安全吗?我不希望在修改“Animal a”的值时修改堆栈中的对象。

任何内置 Java 类都支持此功能吗?

最佳答案

I do not want the object in the stack to be modified when I modify the value of "Animal a".

然后您必须创建 Animal 的新实例。

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

因此,您需要像这样修改代码:-

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

关于Java Stack 保留推送元素的副本而不是对它们的引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13633362/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com