Автоматический equals у record в Java
В разделе про класс Object вы уже видели:
у обычного класса equals без переопределения
сравнивает ссылки. Для record компилятор генерирует
equals по значениям компонентов. Два экземпляра
с одинаковыми данными считаются равными, даже если
созданы отдельными вызовами конструктора:
record Post(String title, int views) {}
Создадим две одинаковые записи и сравним equals со ссылками:
Post a = new Post("News", 12);
Post b = new Post("News", 12);
System.out.println(a.equals(b));
System.out.println(a == b);
Если хотя бы один компонент отличается, результат
equals будет false. Метод
Objects.equals для сравнения с null
здесь не нужен - достаточно вызова на объекте:
Post p1 = new Post("News", 12);
Post p2 = new Post("News", 13);
System.out.println(!p1.equals(p2));
Сравнение учитывает только компоненты из заголовка
record. Поля и методы, объявленные отдельно в теле,
в equals не участвуют - об этом в уроках
про методы и статические члены:
Post left = new Post("Tips", 5);
Post right = new Post("Tips", 5);
System.out.println(left.equals(right));
Сделайте record Employee с компонентами
name и id.
Даны два объекта:
Employee left = new Employee("Ann", 1);
Employee right = new Employee("Ann", 1);
Выведите на экран true, если объекты
равны по equals, иначе false.
Сделайте record Employee с компонентами
name и dept.
Сравните new Employee("Bob", "IT")
и new Employee("Bob", "HR") через
equals и выведите результат.