Какая реализация hashCode в Java-объекте?
Возможный дубликат:
Как вычисляется hashCode() в Java
Я нашел там никакой реализации в hashCode()
методе корневого класса Object
в Java:
public native int hashCode();
Если у меня есть Object a
и Object b
, как я могу узнать значения a.hashCode()
и b.hashCode()
без использования System.out.println()
? Просто с помощью реализации hashCode
.
Я пытаюсь new
два объекта ArrayList
, и, к моему большому удивлению, значения hashCode()
одинаковы: оба они равны 1.
Ответы
Ответ 1
hashCode
- это метод native
, который означает, что системная библиотека называется внутренне. Подробнее см. Java Native Interface.
Возникает вопрос о SO Почему hashCode() и getClass() являются собственными методами? Возможно, вам будет интересно.
Ответ 2
Хэш-код по умолчанию будет специфичным для реализации. Я подозреваю, что это связано с адресом памяти, но обратите внимание, что виртуальная машина перемещает объекты в памяти (и, конечно же, hashCode должен оставаться тем же). Таким образом, это не будет фактический адрес памяти.
Ответ 3
Реализация по умолчанию hashcode()
часто, но не всегда обеспечивает целочисленное значение, основанное на адресе памяти объекта, но адрес памяти может измениться. Это может варьироваться в зависимости от реализации JVM.
хэш-код()
Как вы знаете, этот метод предоставляет код объекта. В основном полученная по умолчанию реализация hashCode(), предоставленная Object, путем сопоставления адреса памяти с целым значением. Если посмотреть на источника класса Object, вы найдете следующий код для хэш-код.
public native int hashCode();
Указывает, что hashCode - это собственная реализация, которая обеспечивает адрес памяти в определенной степени. Однако можно переопределить метод hashCode в вашем классе реализации.
http://www.javaworld.com/community/node/1006