2011-09-21 46 views
0

如果我们检索地图值,然后我们做了一些变化, 所以我们再次需要把该对象返回地图地图GET值查询

为前

 Human human = (Human) domainObjects 
      .get(Constants.Human; 
     human.setName("Vish"); 

    domainObjects.put(Constants.Human, human); 

或者像我们传递即使没有使用地图放置功能,对象的参考也会出现在域对象中的更改

+0

我有一个很难看到这个问题。你能改述一下吗? – AndroidHustle

回答

4

地图返回到下面的对象的引用的副本。不是该对象的副本。当你调用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

无需重新放置。更改将在单个对象上进行。

0

Java的工作参照对象,而不是与你的原语。所以你会一直在使用相同的“内存块”。在所有指向该对象的变量中都可以看到更改。

1
  • 如果您从HashMap中获取对象,它将作为参考传递给您,因此任何对其方法的调用都将影响包含在Map中的对象。
  • 但请注意,新的实例不会影响映射中包含的对象。

实施例:

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" 
0

NO。你需要理解两个概念,变量和对象,并且知道java通过引用传递对象。

'你'在你写下并声明的'human'.java源文件是一个变量, 在运行时,'human'变量是对某个对象的引用。

因此任何方法返回值实际上是指一个对象的变量。 (基本上是大多数时间,在简单情况下...)

当你调用variable.method()时,它实际上告诉jvm调用引用的对象的方法。

在你的情况下,这是更新的对象(即由“人”的变量引用)“名称”,值为“愿望”字段