对象作为没有Hashcode和equals的Map键

Ved*_*Ved 12 java

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));
    }
}   
Run Code Online (Sandbox Code Playgroud)

输出是:

first 
second 
Run Code Online (Sandbox Code Playgroud)

这种"获取"方法如何表现?由于m1和M2具有相同的值并且我没有覆盖hashcode(),所以会调用Object类的equals()方法吗?

它是否正确 ?

  1. 没有哈希码方法,因此JVM无法查看对象m1和m2是否包含不同的值
  2. 没有重写equals方法,因此调用了Object类的equals(),并且由于两个对象都不同,上面的代码工作正常,而m2不替换m1的值.

Nic*_*men 11

当您的类没有覆盖hashCode()equals(Object o)方法时,Java只使用对内存中对象的实际引用来计算值(即检查它是否与该类的实例相同).这就是为什么你仍然得到两个结果.