同じ内容の2つのインスタンス
出力はどれか。
public class Main {
public static void main(String[] args) {
Point p1 = new Point();
Point p2 = new Point();
System.out.println((p1 == p2) + " " + p1.equals(p2));
}
}
class Point {
int x = 1;
}
- A
false false - B
true true - C
false true - D コンパイルエラーになる
正解と解説を見る
正解: A
- A: 別々に new したので
==は false、equals をオーバーライドしていないので equals も参照の比較で false です。 - B: new した2つは別のオブジェクトなので、
==は true になりません。 - C: equals をオーバーライドしていないクラスでは、equals も
==と同じく参照を比べます。 - D: equals は Object のメソッドなので、どのクラスでも呼べます。
ポイント
- new で作った2つのインスタンスは別のオブジェクトなので
==は false です。 - equals をオーバーライドしていないクラスでは、equals も
==と同じく参照を比べるので false です。
「Java クラスの定義とインスタンス化とオブジェクトのライフサイクル」をこのサイトで解く (記録・間違えた問題の解き直し・AI教師への質問)