7

次のコードは私に与えます:The local variable str may not have been initialized

public class experiment{

    public static void main(String[] args){

        int day = 1;
        String str;

        switch (day) {
        case 1 : str = "nice";
        break;
        }

        System.out.println(str);

    }


}

だから、私は値を与えましstrnull、そしてそれはうまくいきました、しかし私はまだ最初に値を初期化せずにドキュメント上のものがうまくいくのか疑問に思っています、私はトリプルチェックしました、そして私はタイプミスがないと思います:

public class SwitchDemo {
    public static void main(String[] args) {

        int month = 8;
        String monthString;
        switch (month) {
            case 1:  monthString = "January";
                     break;
            case 2:  monthString = "February";
                     break;
            case 3:  monthString = "March";
                     break;
            case 4:  monthString = "April";
                     break;
            case 5:  monthString = "May";
                     break;
            case 6:  monthString = "June";
                     break;
            case 7:  monthString = "July";
                     break;
            case 8:  monthString = "August";
                     break;
            case 9:  monthString = "September";
                     break;
            case 10: monthString = "October";
                     break;
            case 11: monthString = "November";
                     break;
            case 12: monthString = "December";
                     break;
            default: monthString = "Invalid month";
                     break;
        }
        System.out.println(monthString);
    }
}
4

1 に答える 1

13

ドキュメントの例のにdefaultcaseステートメントがあるためです。他のステートメントが一致しswitchない場合に呼び出されます。case独自のコードでは、そのような「フォールバック」はありません。

したがって、呼び出されるステートメントは常に少なくとも1つあり、常に初期化されますmonthString

于 2012-11-04T09:12:19.013 に答える