DEV Community

TANIAOKA, Akihiro
TANIAOKA, Akihiro

Posted on • Updated on

13章5

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' を出力します。
    }
}
Enter fullscreen mode Exit fullscreen mode

このコードを実行すると、setValueメソッド内でthisキーワードが使われていないため、Sampleクラスのvalueフィールドは変更されずにnullを保持し続けます。したがって、toStringメソッドはこのnull値を文字列として返すので、出力はnullとなります。

Top comments (0)