Хэш-код по умолчанию для нулевого объекта - PullRequest
1 голос
/ 06 апреля 2020

In Java, Objects.hash(null) return 0

, но

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

вернет 31

1 Ответ

2 голосов
/ 06 апреля 2020

Это связано с тем, как varargs интерпретируются. Под капотом параметры varargs реализуются путем создания массива.

В случае Objects.hash(null) вы передаете явно буквально пропуская ноль. Там нет массива. Когда вы делаете Objects.hash(map), он преобразуется в массив длины 1 с нулем в качестве первого и единственного элемента.

Из-за способа вычисления кода ha sh значение null и массив с 1 нулевой элемент получает разные коды ха sh.

...