gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:05:26 24 4
gpt4 key购买 nike

根据此 post 的评论,空对象hascode可以抛出NPE零值。这是特定于实现的。但在同一个实现中,为什么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());

}
}

输出:

0
Exception in thread "main" java.lang.NullPointerException
at BinaryTrees.EqualsTesting.main(EqualsTesting.java:14)

如果是这种情况,这是否会影响HashMap 中的键查找,其中允许空键值对。 (它可能散列bucket 0或者抛出一个NPE)

最佳答案

你会如何计算hashCode一个甚至不存在的对象?当p2null , 对其调用任何方法都会抛出 NPE .这并没有为您提供哈希码的任何特定值。

Objects.hashCode()只是一个包装器方法,它对 null 执行预检查值,供引用,不是 null , 它返回与 p2.hashCode() 相同的值就像在这种情况下一样。下面是该方法的源代码:

public static int hashCode(Object o) {
return o != null ? o.hashCode() : 0;
}

关于java - 什么必须是 Java 中空对象的哈希码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21535029/

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