public class Contact
{
int i;
String name;
public Contact(int iVal, String nameVal)
{
i = iVal;
name = nameVal;
}
}
public class MultiMap
{
public static void main (String args[])
{
java.util.HashMap m = new java.util.HashMap();
Contact m1 = new Contact(1, "name");
Contact m2 = new Contact(1, "name");
m.put(m1, "first");
m.put(m2, "second");
System.out.println(m.get(m1));
System.out.println(m.get(m2));
}
}
输出是:
first
second
这个“获取”方法的行为如何?由于 m1 和 M2 具有相同的值,并且我没有覆盖 hashcode(),是否会调用 Object 类的 equals() 方法?
这是正确的吗?
- 没有哈希码方法,所以 JVM 无法查看对象 m1 和 m2 是否包含不同的值
- 没有重写 equals 方法,因此调用了 Object 类的 equals() 并且由于两个对象不同,上面的代码在没有 m2 替换 m1 的值的情况下工作正常。
最佳答案
当 hashCode()
和 equals(Object o)
方法没有被你的类覆盖时,Java 只是使用内存中对象的实际引用来计算值(即检查它是否是该类的相同实例)。这就是为什么您仍然会得到这两个结果的原因。
关于java - 对象作为没有哈希码和等于的映射键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6871929/