@Override
public boolean equals(Object obj) {
if (obj == this) return true;
if (!(obj instanceof Bora)) return false;
Bora bor = (Bora) obj;
return bor.a == a && bor.b != null && b.equals(bor.b) || bor.a == a && b == bor.b ;
}
}
public static void main(String[] args) {
Bora bora = new Bora(1, "a");
Bora bora2 = new Bora(1, "a");
System.out.println(bora.hashCode());
System.out.println(bora2.hashCode());
System.out.println(bora.equals(bora2));
}
}
вывод
1967205423
42121758
true
Почему хэш коды разные а но показыет true?JavaSutra
35 уровень
Вопрос equals и hashCode
Решен
Комментарии (2)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Стас ПасинковSoftware Developer в ZipyMaster
17 августа 2018, 13:06решение
потому что хешкод не переопределен (или переопределен неправильно) и используется стандартный метод хешкод из класса Object, который понятия не имеет как работать с вашим классом, какие в нем есть переменные, какие учитывать, а какие - нет. поэтому стандартный хешкод считает хешкоды для этих объектов по-своему (читай "неправильно"). соответственно, два одинаковых объекта и получают разные хешкоды :)
+2
solwoFull Stack Developer в Корус
16 августа 2018, 23:16решение
Магии не существует. Вы вызываете equals, equals выполняет рово то, что у вас написано.
Если в вашем методе equals не используются хэш-коды, то они никак не влияют на результат сравнения.
Но другие классы могут (если захотят) попытаться схалявить и обойтись без вызова тяжеловесного equals: они сначала вызывают легковесный hashCode. Если хэши не совпадают, то верят на слово, что объекты разные. А если хэши одинаковые, то это еще ничего не значит - надо все-таки по-чесному вызвать equals.
+2