【发布时间】:2020-04-06 17:57:41
【问题描述】:
在 Java 中,Objects.hash(null) 返回 0
但是
Map<Integer, Integer> map = null;
Objects.hash(map)
将返回 31
【问题讨论】:
-
null 不是具有
.hashCode()方法的对象。 (在编程笔记上:散列null甚至可以实现什么?)
在 Java 中,Objects.hash(null) 返回 0
但是
Map<Integer, Integer> map = null;
Objects.hash(map)
将返回 31
【问题讨论】:
.hashCode() 方法的对象。 (在编程笔记上:散列null 甚至可以实现什么?)
这与如何解释可变参数有关。在底层,可变参数是通过创建一个数组来实现的。
在Objects.hash(null) 的情况下,您显然是在传递null。没有数组。当您执行Objects.hash(map) 时,它会转换为长度为 1 的数组,其中 null 作为第一个也是唯一的元素。
由于哈希码的计算方式,null 和具有 1 个 null 元素的数组得到不同的哈希码。
【讨论】: