По сути, ==
сравнивает, если два объекта имеют одинаковую ссылку в куче, поэтому, если две ссылки не связаны с одним и тем же объектом, это сравнение будет ложным.от Object
класс.Этот метод по умолчанию сравнивает, если два объекта имеют одну и ту же ссылку.Это означает:
object1.equals(object2)
<=> object1 == object2
Однако, если вы хотите установить равенство между двумя объектами одного класса, вы должны переопределить этот метод,Также очень важно переопределить метод hashCode()
, если вы переопределили equals()
.
Реализация hashCode()
, когда установление равенства является частью Java Object Contract.Если вы работаете с коллекциями и не реализовали hashCode()
, могут произойти странные плохие вещи:
HashMap<Cat, String> cats = new HashMap<>();
Cat cat = new Cat("molly");
cats.put(cat, "This is a cool cat");
System.out.println(cats.get(new Cat("molly"));
null
будет напечатано после выполнения предыдущего кода, если вы не реализовали hashCode()
.