問題
次のコードをコンパイル、実行するとどうなりますか。
public class Main {
public static void main(String... args) {
Person p = new Person("Duke");
System.out.println(p);
}
}
class Person {
String name;
Person() {
}
Person(String name) {
this.name = name;
}
public String getName() {
return name;
}
}
選択肢
A)NullPointerException がスローされる
B)コンパイルエラーになる
C)null が出力される
D)Duke が出力される
E)Person@7a81197d が出力される
F)Person が出力される
解答
A)NullPointerException がスローされる
B)コンパイルエラーになる
C)null が出力される
D)Duke が出力される
E)Person@7a81197d が出力される
F)Person が出力される
解説
このコードをコンパイル、実行すると、E)Person@7a81197d が出力される という結果になります。
1. メインメソッド
public static void main(String... args) {
Person p = new Person("Duke");
System.out.println(p);
}
Person
クラスのインスタンス p
を new Person("Duke")
で作成しています。このとき、name
フィールドに "Duke"
が設定されます。
System.out.println(p)System.out.println
にオブジェクトを渡すと、toString()
メソッドが呼び出されます。
Person クラスには toString() メソッドがオーバーライドされていないため、Object クラスの toString() メソッドが使用されます。Object
クラスの toString()
メソッドは、オブジェクトのクラス名とハッシュコード(16進数)を含む文字列を返します。例えば、Person@7a81197d
のようになります。
結論
したがって、実行結果は E)Person@7a81197d が出力される です。
対象資格:Java SE17 認定資格