Что выведет код 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 ошибок.
Термины по теме
Ещё по теме «Современная Java: record, sealed»
- switch-выражение с yield
- Pattern matching
- record
- LTS-версии Java
- Фича и версия Java
- Guard в switch
- Наследование record
- Зачем sealed