1224. Зачем нужен equals(). Чем он отличается от операции ==?
В Java операция == используется для сравнения примитивных типов данных (int, float, boolean и т. д.) и для сравнения ссылок на объекты. Операция equals() же используется для сравнения содержимого (значений) объектов.
По умолчанию метод equals() в Java также выполняет сравнение ссылок на объекты, но этот метод можно переопределить в своем собственном классе, чтобы определить, каким образом должно производиться сравнение двух экземпляров этого класса (например, по полям класса).
Важно знать, что если вы переопределили метод equals(), то также рекомендуется переопределить метод hashCode(), чтобы обеспечить корректное поведение объектов в хеш-таблицах.
Вот пример того, как мог бы выглядеть переопределенный метод equals() и hashCode() в классе Person:
public class Person {
private String name;
private int age;
// constructors, getters, setters, etc.
@Override public boolean equals(Object obj) {
if (obj == null || getClass() != obj.getClass()) {
return false;
}
Person person = (Person) obj;
return age == person.age && Objects.equals(name, person.name);
}
@Override public int hashCode() {
return Objects.hash(name, age);
}
}
В этом примере метод equals() сравнивает объекты Person по полям name и age. Метод hashCode() использует метод Objects.hash(), чтобы вычислить хеш-код на основе тех же полей. Переопределение hashCode() гарантирует, что два экземпляра класса, которые равны с помощью equals(), также будут иметь одинаковые хеш-коды.