record難易度 標準無料
次のコードの出力として正しいものを選べ。
1 public class Q8 {
2 record Point(int x, int y) {
3 Point { // コンパクトコンストラクタ
4 if (x < 0 || y < 0) throw new IllegalArgumentException();
5 }
6 }
7 public static void main(String[] args) {
8 Point p1 = new Point(1, 2);
9 Point p2 = new Point(1, 2);
10 System.out.println(p1.equals(p2));
11 System.out.println(p1 == p2);
12 System.out.println(p1);
13 }
14 }
- A
true/false/Point[x=1, y=2] - B
true/true/Point[x=1, y=2] - C
false/false/Point@1b6d3586(ハッシュ表記) - D
true/false/Point(x=1, y=2)
正解・解説・誤答理由・ひっかけを見る▼ open
✓ 正解:A✓Gold監修
解説
record は equals/hashCode/toString を全コンポーネントに基づき自動生成する。
p1.equals(p2) は x・y が等しいので true(値ベースの等価)。
p1 == p2 は別インスタンスへの参照比較なので false。
自動生成 toString の形式は RecordName[component1=値, component2=値](角括弧・=・カンマ区切り)で、ここでは Point[x=1, y=2]。- B
==は参照比較。newで別々に生成しているので同一参照ではなくfalse。 - Crecord は
toStringを自動生成するのでObject既定のハッシュ表記にはならない。equals も自動生成で値比較=falseでない。 - Drecord の
toStringは丸括弧(...)ではなく角括弧[...]を使う。
ひっかけ: 自動生成
toString の正確な書式(角括弧 Point[x=1, y=2])。equals=値、===参照。実機確認の答え合わせ
出力: true false Point[x=1, y=2]
✓Gold 保有者による書き下ろし解説・実機で検証済