hashCode не изменяется в методе при изменении параметров
Это нормальное поведение для Object.hashCode
. И ваш Cat
метод использует унаследованный hashCode
.
. Реализация hashCode
в Object
возвращает «хэш-код идентификации»; то есть тот, который вычисляется (каким-то образом) из идентичности объекта. Это не изменится за время существования объекта.
Если вам нужно значение хеш-кода, которое зависит от полей вашего объекта, вам необходимо переопределить Object.hashCode
; например,
@Override
public int hashCode() {
return age + (weight * 31) + (strength * 31 * 67);
}
Обратите внимание, что значения хеш-кода НЕ гарантированно являются уникальными. Уникальность не является частью контракта равно / хэш-код . (Многие кошки могут иметь один и тот же хэш-код.)
Кроме того, изменение хэш-кодов может быть проблемой. Если вы заставите хеш-код объекта измениться, когда он является членом HashSet
или ключом HashMap
, структура данных будет работать непоследовательно.