Java Object.hashCode() - адрес или случайный()?

Я пытаюсь понять встроенную реализацию метода hashCode(). Что именно возвращает этот метод? Это адрес памяти или это случайное значение?

Ответы

Ответ 1

.hashCode() Собственная реализация зависит от JVM.

например. HotSpot имеет 6 Object.hashCode() реализаций. Вы можете выбрать его с помощью флага -XX:hashCode=n, запускающего JVM через командную строку, где n:

0 - RNG Park-Miller (по умолчанию)
 1 - f (адрес, global_statement)
 2 - постоянная 1
 3 - Последовательный счетчик
 4 - Адрес объекта
 5 - Потоковая локальная Xorshift

Ответ 2

Из документации:

Насколько разумно практично, метод hashCode, определенный классом Object, возвращает разные целые числа для разных объектов. (Обычно это выполняется путем преобразования внутреннего адреса объекта в целое число, но этот способ реализации не требуется языком программирования Java TM.)

Таким образом, это может быть связано с адресом памяти, но это необязательно - и вы определенно не должны делать никаких предположений о том, что он связан с памятью вообще.

Ничего, что вы делаете с хеш-кодом, не должно заботиться об этом вообще. Единственное, что вы должны сделать из хеш-кодов:

  • Если хэш-коды двух объектов одинаковы, они могут быть равными объектами
  • Если хэш-коды двух объектов различаются, они не являются равными объектами (при условии правильной реализации, независимо от того, переопределены или нет)

Ответ 3

Ваш ответ лежит здесь. Как указано в документации:

Насколько разумно практично, метод hashCode, определенный классом Object, возвращает разные целые числа для разных объектов. (Обычно это выполняется путем преобразования внутреннего адреса объекта в целое число, но этот способ реализации не требуется языком программирования Java TM.)