【问题标题】:Default hashCode for null object空对象的默认 hashCode
【发布时间】:2020-04-06 17:57:41
【问题描述】:

在 Java 中,Objects.hash(null) 返回 0

但是

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

将返回 31

【问题讨论】:

  • null 不是具有.hashCode() 方法的对象。 (在编程笔记上:散列null 甚至可以实现什么?)

标签: java hashcode


【解决方案1】:

这与如何解释可变参数有关。在底层,可变参数是通过创建一个数组来实现的。

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-04-09
    • 1970-01-01
    • 2017-08-25
    • 2017-03-04
    • 2015-05-25
    • 2015-01-28
    • 2017-11-29
    • 2017-09-30
    相关资源
    最近更新 更多