eag*_*arn 10 java object hashmap hashcode
据该评论后,hascode中null objects能throw NPE或值zero.这是特定于实现的.但相同的实现中,为什么
Objects.hashcode和hascode(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-up在HashMap那里null Key-value pairs是允许的.(它可能既hash要bucket 0或throw a NPE)
Roh*_*ain 15
你如何计算hashCode一个甚至不存在的物体?如果p2是null,调用它的任何方法将抛出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)