Какая реализация 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.

Ответ 2

Хэш-код по умолчанию будет специфичным для реализации. Я подозреваю, что это связано с адресом памяти, но обратите внимание, что виртуальная машина перемещает объекты в памяти (и, конечно же, hashCode должен оставаться тем же). Таким образом, это не будет фактический адрес памяти.

Ответ 3

Реализация по умолчанию hashcode() часто, но не всегда обеспечивает целочисленное значение, основанное на адресе памяти объекта, но адрес памяти может измениться. Это может варьироваться в зависимости от реализации JVM.

хэш-код()

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

public native int hashCode();

Указывает, что hashCode - это собственная реализация, которая обеспечивает адрес памяти в определенной степени. Однако можно переопределить метод hashCode в вашем классе реализации.

http://www.javaworld.com/community/node/1006