Шок! Метод hashCode в Java не имеет отношения к адресу памяти

Класс Object в Java имеет метод hashCode. Когда ходишь по собеседованиям, то многие ожидают в ответе на описание метода hashCode услышать фразу, что он возвращает адрес памяти. Но на самом деле, метод hashCode  зависит от реализации. Я уже писал об этом однажды. Думаю, что стоит написать ещё раз.

Так вот, запомните:

  • Число возвращаемое реализацией метода hashCode из класса Object в Java в спецификации не закреплено. Оно зависит от реализации.
  • В OpenJDK версии 6 и 7 метод hashCode у класса Object возвращает случайно сгенерированное число, но при повторных вызовах на том же самом экземпляре объекта возвращается то же число, что было сгенерированно для первого раза.
  • В OpenJDK версии 8 и 9 метод hashCode генерирует число на основе состояние потока.

Разумеется, нужны ссылки: ссылка1, ссылка 2.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *