什么必须是Java中的空对象的哈希码?

eag*_*arn 10 java object hashmap hashcode

据该评论,hascodenull objectsthrow NPE或值zero.这是特定于实现的.但相同的实现中,为什么 Objects.hashcodehascode(instance)返回不同的值.对于前:

public class EqualsTesting {

    public static void main(String[] args){
        String p1 =null;
        String p2 = null;
        System.out.println(Objects.hashCode(p1));
        System.out.println(p2.hashCode());

    }
}
Run Code Online (Sandbox Code Playgroud)

输出:

0
Exception in thread "main" java.lang.NullPointerException
    at BinaryTrees.EqualsTesting.main(EqualsTesting.java:14)
Run Code Online (Sandbox Code Playgroud)

如果是这样的话,这会不会影响到key look-upHashMap那里null Key-value pairs是允许的.(它可能既hashbucket 0throw a NPE)

Roh*_*ain 15

你如何计算hashCode一个甚至不存在的物体?如果p2null,调用它的任何方法将抛出NPE.这并没有给你任何特定的hashCode值.

Objects.hashCode()只是一个包装器方法,它执行null值的预检查,并且对于不是的引用null,它返回与p2.hashCode()此情况相同的值.这是方法的源代码:

public static int hashCode(Object o) {
    return o != null ? o.hashCode() : 0;
}
Run Code Online (Sandbox Code Playgroud)


San*_*rma 6

如果你将四处搜索,你会发现它HashMap有一个特殊null处理.null值很好,因为你不计算它们中的哈希码HashMap.这就是null键可以正常工作的原因HashMap.至于为什么Objects.hashCode工作正常,请看看Rohit的答案.