空对象的默认 hashCode

Default hashCode for null object

在Java, Objects.hash(null) return 0

但是

Map<Integer, Integer> map = null;
Objects.hash(map)

将 return 31

这与可变参数的解释方式有关。在幕后,varargs 参数是通过创建一个数组来实现的。

Objects.hash(null) 的情况下,您显然是在字面上传递 null。没有数组。当您执行 Objects.hash(map) 时,这将转换为长度为 1 的数组,第一个也是唯一的元素为 null。

由于哈希码的计算方式不同,null 和具有 1 个 null 元素的数组获得不同的哈希码。