#java #объекты
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?
Ответы
Ответ 1
если объекты одинаковые, то и хеш-коды одинаковые Это правильное утверждение, только трактуете вы его неверно. Это ваша задача как программиста сделать так, чтобы хешкоды у одинаковых объектов были одинаковы (меру одинаковости выбираете и контролируете вы). Так как нельзя заранее определить, какие объекты будут равны, по умолчанию хешкодом является, емнип, указатель на объект, и в этом случае объект будет равен только себе самому. Чтобы изменить это поведение, вам нужно переопределить методы .hashcode() и .equals().Ответ 2
Если вы хотите сравнивать объекты собственного класса вам необходимо переопределить свойство equal() в вашем классе.Ответ 3
Загляните под капот. Советую прочитать Рихтер CLR via C# стр. 172. Ссылки и будут разными, так как это два разных объекта. BlackBox object1 = new BlackBox(5, 10); BlackBox object2 = object1; System.out.println(object1.hashCode()); System.out.println(object2.hashCode()); System.out.println(object1.equals(object2));
Комментариев нет:
Отправить комментарий