Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗jvOpRcEq 80 of 147 menu
◀ ▶

Автоматический 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 и выведите результат.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить