Страницы

Поиск по вопросам

воскресенье, 7 апреля 2019 г.

Методы equals и hashcode

BlackBox object1 = new BlackBox(5, 10); BlackBox object2 = new BlackBox(5, 10);
System.out.println(object1.hashCode()); System.out.println(object2.hashCode()); System.out.println(object1.equals(object2));
1956725890 356573597 false
Из статьи на хабре: если объекты одинаковые, то и хеш-коды одинаковые (но не наоборот, см. правило 3)
Почему в вышеприведенном примере хеш-коды разные? Почему equals() возвращает false?


Ответ

если объекты одинаковые, то и хеш-коды одинаковые
Это правильное утверждение, только трактуете вы его неверно. Это ваша задача как программиста сделать так, чтобы хешкоды у одинаковых объектов были одинаковы (меру одинаковости выбираете и контролируете вы). Так как нельзя заранее определить, какие объекты будут равны, по умолчанию хешкодом является, емнип, указатель на объект, и в этом случае объект будет равен только себе самому. Чтобы изменить это поведение, вам нужно переопределить методы .hashcode() и .equals()

Комментариев нет:

Отправить комментарий