Я получаю объект из HashMap, изменяю его и затем сохраняю в HashMap под другим ключом.
Однако мои изменения также влияют на исходный объект.
Мой код выглядит следующим образом:
Dog.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;
. Я просто создам новый экземпляр и вручную скопирую нужные мне поля. Большое спасибо всем, кто помог!