Что выведет код Junior Современная Java: record, sealed обновлено

Что выведет: record equals и toString

Вопрос

Что выведет программа (Java 21)? Каждый вывод println с новой строки.

import java.util.*;

public class Main {
    record Point(int x, int y) {
        Point {
            if (x < 0) throw new IllegalArgumentException("x < 0");
        }
        Point scale(int k) { return new Point(x * k, y * k); }
    }
    public static void main(String[] args) {
        Point a = new Point(1, 2);
        Point b = new Point(1, 2);
        System.out.println(a);
        System.out.println(a == b);
        System.out.println(a.equals(b));
        System.out.println(new HashSet<>(List.of(a, a.scale(2))).contains(new Point(2, 4)));
        try {
            new Point(-1, 0);
        } catch (IllegalArgumentException e) {
            System.out.println(e.getMessage());
        }
    }
}

Попробуйте сами

Напишите, что выведет код: каждый вывод с новой строки.

Показать ответ и разбор

Коротко

Код выведет: Point[x=1, y=2], false, true, true, x < 0. toString record имеет вид Имя[компонент=значение, ...]. == сравнивает ссылки двух разных объектов: false. equals и hashCode сгенерированы по компонентам: true, и HashSet находит равную точку.

Что выведет

Point[x=1, y=2]
false
true
true
x < 0

Разбор

toString record имеет вид Имя[компонент=значение, ...]. == сравнивает ссылки двух разных объектов: false. equals и hashCode сгенерированы по компонентам: true, и HashSet находит равную точку. Компактный конструктор выполняется при каждом создании и бросает исключение.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.

Термины по теме