Часто утверждается, что реализация Object.hashCode()
(реализация по умолчанию для всех объектов) дает адрес памяти объекта. Это утверждение часто связано с объяснением специфического результата, созданного Object.to String().
См. здесь для примера.
Это, безусловно, не случай для любых JVM/JRE, о которых я знаю. Не в последнюю очередь потому, что адреса, как правило, 64 бит. Но также сборщики мусора перемещают объекты, поэтому адрес меняется. Я видел утверждения, что это может быть исходный адрес памяти объекта. Но так как многие объекты будут иметь аналогичные адреса, это будет плохой выбор для хэш-кода.
Существуют или когда-либо были широко используемые JVM/JRE, для которых он был (начальным) адресом памяти объекта.
Я знаю, что JavaDoc для класса Object
предполагает, что hashCode
для реализации может быть адресом памяти. Но я подозреваю, что это очень устаревшее выражение, которое никогда не обновлялось.
Действительно, текущий JVM для Oracle не использует адрес памяти (но может быть настроен для этого):
Идея о том, что хэш-код является адресом памяти, является историческим артефактом:
Мой вопрос в том, является ли (и который) любой широко используемый JVM использовал адрес памяти в качестве своей (по умолчанию) реализации.