我有一个hashmap并使用Objects作为键,当你更改Objects的属性时的结果似乎很奇怪。例如
public class Users
{
private String name;
public Users(String name)
{
this.name = name;
}
public String getName()
{
return name;
}
public void setName(String name)
{
this.name = name;
}
@Override
public int hashCode()
{
return name.hashCode();
}
@Override
public boolean equals(Object obj)
{
Users other = (Users) obj;
if (!name.equals(other.name))
return false;
return true;
}
}
我的主要课程如下
public class MyMainClass
{
public static void main(String args[])
{
Map<Users, String> map = new HashMap<Users, String>();
Users u1 = new Users("John");
map.put(u1, "Australia"); // line 1
map.put(new Users("John"), "US"); // line 2
System.out.println(map.get(new Users("John"))); // line 3 : print US
u1.setName("Lara"); //line 4
System.out.println(map.get(new Users("John"))); // line 5 : print null
}
}
在第1行的上面示例中,我放置了一个u1对象,而第2行覆盖了u1对象,其中包含新对象,这就是第3行打印覆盖对象US的原因。
第4行的我正在改变地图中不存在的u1对象的值,然后为什么第5行打印为空。
在第5行,我使用new得到一个值,所以我认为应该返回US。
有人可以帮助我吗?