Если не переопределить метод hashCode
, какова реализация по умолчанию hashCode
?
Какова реализация `hashCode` по умолчанию?
Ответ 1
Затем этот класс наследует hashCode
от одного из своих предков. Если их не переопределяет, используется Object.hashCode.
Из docs:
Насколько разумно практично, метод hashCode, определенный классом Object, возвращает разные целые числа для разных объектов. (Обычно это выполняется путем преобразования внутреннего адреса объекта в целое число, но этот способ реализации не требуется языком программирования JavaTM.)
Таким образом, реализация по умолчанию - это JVM-specific
Ответ 2
По умолчанию методы, которые не переопределены, наследуются от Object
.
Если вы посмотрите на документацию этого метода, возвращаемые значения будут "[...] distinct integers for distinct objects. (This is typically implemented by converting the internal address of the object into an integer [...])
". Метод в java.lang.Object
объявляется как native, что означает, что реализация обеспечивается JVM и может варьироваться в зависимости от среды выполнения.
Небольшой пример:
Object o1 = new Object();
Object o2 = new Object();
System.out.println(o1.hashCode());
System.out.println(o2.hashCode());
печатает (используя мой jdk6):
1660187542
516992923
Hex-представление значения hashCode()
используется в реализации по умолчанию toString()
по умолчанию: Running System.out.println(o1)
печатает что-то вроде
[email protected]
Ответ 3
Object.hashcode() является нативным методом.
public native int hashCode();
Это означает, что он реализован в конкретном коде платформы и отображается как собственный метод.
код для него будет скомпилированным кодом и недоступен с JDK
этот существующий вопрос может предоставить дополнительную информацию.