gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-30 21:24:24 25 4
gpt4 key购买 nike

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com