英文:
Default hashCode for null object
问题
在Java中,Objects.hash(null)
返回0
但是
Map<Integer, Integer> map = null;
Objects.hash(map)
将返回31。
英文:
In Java, Objects.hash(null)
return 0
but
Map<Integer, Integer> map = null;
Objects.hash(map)
will return 31
答案1
得分: 2
与可变参数的解释方式有关。在底层,可变参数是通过创建一个数组来实现的。
在 Objects.hash(null)
的情况下,你显然传递了一个 null。这里没有数组。当你执行 Objects.hash(map)
时,这会转换为一个长度为1的数组,第一个也是唯一的元素是 null。
由于计算哈希码的方式,null 和一个具有1个null元素的数组具有不同的哈希码。
英文:
It is related to how varargs are interpretted. Under the hood, varargs parameters are implemented by creating an array.
In the Objects.hash(null)
case, you are passing obviously literally passing null. There is no array. When you do Objects.hash(map)
, this is converted to an array of length 1, with null as the first and only element.
Because of the way that hash code is calculated, null and an array with 1 null element get different hash codes.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论