在JVM堆中,是否可以有多个具有相同哈希码的对象?

Mur*_*ali 1 java hash jvm

根据标题,堆上是否可以有多个具有相同哈希码的对象?

Mic*_*ers 22

是.

public class MyObject {
    @Override
    public int hashCode() {
        return 42;
    }

    public static void main(String[] args) {
        MyObject obj1 = new MyObject();
        MyObject obj2 = new MyObject(); // Ta-da!
    }
}
Run Code Online (Sandbox Code Playgroud)

对于一个不那么轻率的答案,请考虑hashCode Javadocs:

hashCode的一般契约是:

  • ......(剪辑)......
  • 如果两个对象根据equals(Object)方法相等,则对两个对象中的每一个调用hashCode方法必须生成相同的整数结果.


dfa*_*dfa 6

是的,因为您可以拥有任意数量的对象hashCode.例如,以下代码,没有实习字符串,显示了这个事实:

String foo = new String("dfa");
String bar = new String("dfa");
assert foo != bar; // yields false, two distinct objects (references)
assert foo.hashCode() == bar.hashCode(); // yields true
Run Code Online (Sandbox Code Playgroud)