gpt4 book ai didi

java - Hashmap 返回引用而不是复制

转载 作者:行者123 更新时间:2023-12-05 00:41:29 24 4
gpt4 key购买 nike

我有一个名为 Person 的模型,具有属性

name
image
age
amount

我有一个单例 HashMap Hashmap<String,Person> globalPersonList其中包含人员对象列表。

我正在尝试从我的 hashmap 中检索一个对象,例如

Person existingPerson = globalPersonList.get("key");

我想创建一个新的Person实例和初始化 existingPerson属性如

Person person = new Person();
person = globalPersonList.get("key");

现在我想为这个人对象设置金额字段。我试过了

newPerson.setAmount(100); 

但它不应该影响 globalPersonList .我只希望我的 newPerson 对象中的金额值。但现在这是在 globalPersonList 中设置的。还。如果我尝试设置金额后

globalPersonList.get("key").getAmount()

它给出了我设定的金额。是否使用对新对象的引用?我想要一个 Person 对象的单独副本,这样它就不会影响主 hashmap。

最佳答案

这是期望的行为。您的 Map's get(...) 方法将返回存储在 map 中的对象,而不是该对象的副本。您应该为您的 Person 使用复制构造函数。

public Person(Person sourcePerson) {
//copy all field values (you didn't write what are your fields so I might not be 100% accurate here)
this.name = sourcePerson.name;
this.image = sourcePerson.image; //I don't know what type of data is stored in image so I'll just assume it's a String url path to an image
this.age = sourcePerson.age;
this.amount = sourcePerson.amount;
}

然后:

Person person = new Person(globalPersonList.get("key"));

关于java - Hashmap 返回引用而不是复制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33547623/

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