【发布时间】:2019-06-03 19:20:21
【问题描述】:
我从 HashMap 中获取一个对象,对其进行修改,然后将其保存到 HashMap 中的不同键下。 但是,我的更改也会影响原始对象。
我的代码如下:
狗.java:
public class Dog {
public String id = "";
public String name = "";
}
MyApp.java:
import java.util.*;
public class MyApp {
public static void main(String[] args) {
Dog dog1 = new Dog();
dog1.id = "d1";
dog1.name = "dog1";
System.out.println(dog1.id); // d1
System.out.println(dog1.name); // dog1
HashMap<String, Dog> map = new HashMap<>();
map.put(dog1.id, dog1);
Dog dog2 = map.get(dog1.id);
dog2.id = "d2";
dog2.name = "dog2";
System.out.println(dog2.id); // d2
System.out.println(dog2.name); // dog2
map.put(dog2.id, dog2);
System.out.println(dog1.id); // d2
System.out.println(dog1.name); // dog2
System.out.println(dog2.id); // d2
System.out.println(dog2.name); // dog2
}
}
我记得读过 HashMaps 通过引用/指针传递值。
如何防止对已修改对象的更改影响原始对象?
更新: 所以看来dog2 = map.get(dog1.id); 相当于Dog dog2 = dog1;。我将创建一个新实例并手动复制我需要的字段。非常感谢所有帮助过的人!
【问题讨论】:
-
你必须创建一个 new 对象
-
听起来你想在地图上放两条狗。但你只创造了一个。你只是在拖着他走。
标签: java hashmap pass-by-reference