Сравнение объектов через equals в Java
Для сравнения содержимого объектов вызывают equals
у одного из них и передают второй как аргумент. У строк
метод уже переопределён: сравниваются символы, а не ссылки.
У своего класса логику равенства задают в переопределённом
equals.
Класс Post сравнивает записи по заголовку:
class Post {
public String title;
public Post(String title) {
this.title = title;
}
@Override
public boolean equals(Object obj) {
if (!(obj instanceof Post other)) {
return false;
}
return title.equals(other.title);
}
}
Создадим три объекта и сравним каждую пару методом equals:
Post first = new Post("News");
Post second = new Post("News");
Post other = new Post("Draft");
System.out.println(first.equals(second));
System.out.println(first.equals(other));
Аргумент типа Object перед сравнением полей проверяют
через instanceof. Если передали null или объект
другого класса, результат - false:
Post post = new Post("News");
System.out.println(post.equals(null));
System.out.println(post.equals("News"));
Поля типа String внутри equals тоже сравнивают
через equals, а не через ==:
String a = new String("News");
String b = new String("News");
System.out.println(a == b);
System.out.println(a.equals(b));
Сделайте класс Employee с полем name.
Переопределите equals по имени. Создайте два объекта
с одинаковым именем и выведите результат equals.