これは、宿題として行っている小さなプログラムの一部です。
public Exam maxGrade() {
Node p = firstNode;
int max = 0;
String name;
while (p!=null) {
if (p.info.getGrade()>max) {
max = p.info.getGrade();
name = p.info.getName();
}
p = p.next;
}
if (name==null)
return null;
else
return searchByName(name);
}
したがって、先に進んでコンパイルすると、コンパイラは次のメッセージを出力します。
Student.java:127: エラー: (name==null) の場合、変数名が初期化されていない可能性があります
この問題は、4 行目を次のように置き換えることで簡単に解決できます。
String name = null;
これで、いくつかのロジックを見ることができます。しかし、私は本当に問題の背後にある仕組みを把握したいと思っています. つまり、コード内で変数を使用して何かを行っていることがわかった場合、コンパイラが変数が初期化されているかどうかをチェックするのは合理的だと思われますが、変数を初期化する必要があることは何もしていないと思います。
このような情報源によると、文字列 (または他のオブジェクト) 変数「名前」を宣言するだけで、既に null を指しています。では、なぜその値が null かどうかを単純にチェックすることが異常と見なされるのでしょうか? コンパイラは、割り当て以外の初期化されていない変数に対して行うことをエラーと見なしますか?