如果我们从Map中检索值,然后我们会做一些更改, 所以我们再次需要将该对象放回Map
for ex
Human human = (Human ) domainObjects
.get(Constants.Human;
human.setName("Vish");
domainObjects.put(Constants.Human, human);
或者当我们传递对象的引用时,即使不使用Map put函数,更改也将出现在域对象中
答案 0 :(得分:4)
Map返回对底层对象的引用的副本。不是对象的副本。当你调用setName时,你正在改变对象。
看起来你应该为你使用枚举常量或普通类。
Map<EnumType, Object> map = new EnumMap<EnumType, Object>(EnumType.class);
Human human = (Human) map.get(EnumType.Human);
或
Map<Class, Object> map = new LinkedHashMap<Class, Object>();
Human human = (Human) map.get(Human.class); // no need for a constant.
答案 1 :(得分:1)
无需再次提起。更改将在单个对象上。
答案 2 :(得分:1)
示例:
Map<Integer, Human> map = new HashMap<Integer, Human>();
map.put(1, new Human("Toto"));
Human human = map.get(1);
human.setName("Tutu");
human = new Human("Tata");
System.out.println(map.get(1).getName()); // "Tutu"
System.out.println(human.getName()); // "Tata"
答案 3 :(得分:0)
Java的工作原理是对象,而不是原语。所以你将一直使用相同的“内存块”。在指向该对象的所有变量中都可以看到更改。
答案 4 :(得分:0)
NO。你需要理解两个概念,变量和对象,并且知道java是通过引用传递对象。
你写下来并在你身上声明的'人'.java源文件是一个变量, 在运行时,'human'变量是对某个对象的引用。所以任何方法返回值实际上都是一个引用对象的变量。 (基本上,大部分时间,简单的情况......)
当你调用variable.method()时,它实际上告诉jvm调用引用对象的方法。
在你的情况下,它更新对象(由'人'变量引用''名称'字段,值为'wish'