class TestMe{
public static void main (String args[]){
String s3;
System.out.print(s3);
}
}
コンパイラがエラーを出す理由、参照オブジェクトのデフォルト値が null である、なぜそれが出力されないのか...??
error: variable s3 might not have been initialized
class TestMe{
public static void main (String args[]){
String s3;
System.out.print(s3);
}
}
コンパイラがエラーを出す理由、参照オブジェクトのデフォルト値が null である、なぜそれが出力されないのか...??
error: variable s3 might not have been initialized
JLSが§14.4.2でそう言っているので、これはエラーです。ローカル変数宣言の実行:
宣言子に初期化式がない場合、変数へのすべての参照の前に変数への代入を実行する必要があります。そうしないと、 §16の規則によりコンパイル時エラーが発生します。
ローカル変数は使用する前に初期化する必要があります。ローカル変数は Java でデフォルト値をstring s3
取得しないため、ローカル変数であるためデフォルト値 null を取得できず、コンパイラ エラーが発生します。
フォームJLS :
宣言子に初期化式がない場合、変数へのすべての参照の前に変数への代入を実行する必要があります。そうしないと、§16 の規則によりコンパイル時エラーが発生します。
デフォルト値のは、クラスの非フィールドnull
にのみ適用されます。final
他のすべてのケースでは、最初に使用する前に初期化する必要があります
ローカル変数について私が知っていることは、
ローカル変数は主に何らかの計算を行うために宣言されているため、変数に値を与えるのはプログラマーの決定であり、デフォルト値をとるべきではありません。プログラマーが誤ってローカル変数を初期化しなかった場合、デフォルト値を取り、出力は正しくありません。したがって、ローカル変数は、間違いを避けるために、プログラマーが変数を使用する前に初期化するようにプログラマーに要求します。
デフォルト値が使用される独特のシナリオは、関係する変数がオブジェクトのフィールドまたは配列のコンポーネントであり、ローカルである場合です。実際、配列は常に適切なデフォルト値でセルを初期化します。
したがって、あなたの場合、変数は(メソッドに対してローカルであるため)フィールドからのものではなく、配列の初期化に関与していません。したがって、コンパイラは論理的に文句を言います。
はい、必要です。
String s3;
s3 = "Something....";
System.out.print(s3); // prints "Something..."
ローカル変数を使用する前に、初期化する必要があります。