this を付け忘れたコンストラクタ
出力はどれか。
public class Main {
public static void main(String[] args) {
System.out.println(new Person("Ann").name);
}
}
class Person {
String name;
Person(String name) {
name = name;
}
}
- A
null - B
Ann - C
name - D コンパイルエラーになる
正解と解説を見る
正解: A
- A:
name = nameは引数に引数を代入しているだけで、フィールドは null のままです。 - B: フィールドに代入するには
this.name = name;と書く必要があります。 - C: name は変数名で、"name" という文字列が入るわけではありません。
- D: 同じ名前の引数とフィールドがあっても、コンパイルはできます。
ポイント
- 引数とフィールドが同じ名前のとき、ただの name は 引数 を指します。
name = nameはフィールドを変えません。 this.name = name;と書きます。