public class Sample {
private String value; // フィールド変数はデフォルトでnullに初期化されます。
public void setValue(String value) {
// ここで問題が起こります。'this'キーワードがないため、
// フィールドの'value'ではなく、引数のローカル変数'value'が参照されています。
// 結果として、フィールドの'value'は変更されずにnullのままです。
value = "Hello, " + value; // 正しくは 'this.value = "Hello, " + value;' であるべきです。
}
public String toString() {
// 'value' フィールドの値を返しますが、setValueメソッドではフィールドが更新されていないため、
// このメソッドが返すのはデフォルト値の 'null' です。
return value; // 'null' が返されることになります。
}
}
public class Main {
public static void main(String[] args) {
Sample s = new Sample(); // Sampleクラスのインスタンスを生成します。
s.setValue("Java"); // ここでは実際には何も設定されていません。フィールド'value'はnullのままです。
System.out.println(s.toString()); // 'null' を出力します。
}
}
このコードを実行すると、setValue
メソッド内でthis
キーワードが使われていないため、Sample
クラスのvalue
フィールドは変更されずにnull
を保持し続けます。したがって、toString
メソッドはこのnull
値を文字列として返すので、出力はnull
となります。
Top comments (0)