У меня есть class Dog extends Animal
.реализация hashCode в java
Затем я вызываю метод hashCode() следующим образом.
Animal animal = new Dog(200);
System.out.println(animal.hashCode());
Здесь
Если я переопределен в хэш-код() в классе Dog он будет возвращен. Если я переопределил hashCode() в классе Dog, он будет возвращен. Осталось некоторое целое число.
Я хочу знать ...
Почему вызвать хэш-код() из суперкласса, когда он не переопределен в классе собак? Как и что генерируется «некоторое целое»
Когда hashCode не генерируется нигде. (Я слышал, что это место в памяти объекта, но не уверен.)
Ах, что вы говорите, если хэш-код() переопределяется где-нибудь в иерархии классов , он будет называться. Кроме того, вызывается java.lang.Object. ОК. Тогда что это за «внутренний адрес»? это адрес памяти или как она генерируется? Спасибо за ответ. – namalfernandolk
Реализация по умолчанию возвращает значение, равное возвращаемому значению ['System.identityHashCode()'] (http://docs.oracle.com/javase/7/docs/api/java/lang/System.html# identityHashCode (java.lang.Object)), вызываемый на объект. –
Сказать, что это «внутренний адрес», вводит в заблуждение. Значение может быть * основано * на каком-то адресе, но это ** не ** адрес любого рода, из которого вы можете получить полезную информацию. Это просто квазислучайное число, которое (почти) однозначно идентифицирует объект. (Однако случайность и уникальность не гарантированы). –