1Z0-826-JPN 対応
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  }
  1. Atrue / false / Point[x=1, y=2]
  2. Btrue / true / Point[x=1, y=2]
  3. Cfalse / false / Point@1b6d3586(ハッシュ表記)
  4. Dtrue / false / Point(x=1, y=2)
正解・解説・誤答理由・ひっかけを見る▼ open
✓ 正解:A✓有資格者監修

解説

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]
✓有資格者(著者)による書き下ろし解説

有資格者(著者)が監修した問題は、すべて無料サンプルとして公開しています。買う前に、その全部を実際に解いて解説まで読めます。有料で追加される問題はAIが作成したもので、有資格者の監修は入っていません。

この問題集の作り方

  1. 問題と解説はAIが作成しています。有資格者(著者)が監修した問題は、無料サンプルとして公開している分だけです。有料で追加される問題に監修は入っていません。
  2. 各問に、公式ドキュメントの出典リンクを付けています。書いてあることは、出典に当たって確かめられます。
  3. 誤答の選択肢それぞれに、なぜ誤りなのかの理由を書いています。
  4. 解説に載せているコンパイル結果は、実際に javac を走らせた出力です。想定した挙動ではありません。
  5. 誤りを見つけたら報告できます。原則として無償で訂正・削除します。
  6. 各試験の運営団体とは無関係の非公式教材です。合格を保証するものではありません。
この分野をもっと解いて、得点源に
record / sealed を含む問題を分野別に演習できます。
演習する →