java - 对象作为没有哈希码和等于的映射键

标签 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));
    }
}   

输出是:

first 
second 

这个“获取”方法的行为如何?由于 m1 和 M2 具有相同的值,并且我没有覆盖 hashcode(),是否会调用 Object 类的 equals() 方法?

这是正确的吗?

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

最佳答案

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

关于java - 对象作为没有哈希码和等于的映射键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6871929/

相关文章:

java - 如何在我的 mysql 中查找查询返回的结果数?

Java 检测 Microsoft 远程桌面断开连接

java - SpringBoot @interface 总结不同注解

java - 用于将 PDF 文件转换为位图的最可靠的开源 Java 库

java - 序列化双括号初始化 Map

java - 检查文本是否有多个链接

java - HelloWorld SpringMVC - HTTP 状态 404

java - 从 xlsx 文件读取时出现 NullPointerException

java - 我认为维基百科上的 Java 矩阵链乘法算法不正确

带 GUI 的 Java 测验