切换语句未初始化的变量

sia*_*ooo 7 java switch-statement

以下代码给了我: 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);

    }


}
Run Code Online (Sandbox Code Playgroud)

所以,我给了str一个null值,它有效,但我仍然想知道为什么文档上的那个没有初始化值,我已经三重检查,我不认为我有任何错别字:

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);
    }
}
Run Code Online (Sandbox Code Playgroud)

J. *_*een 13

因为文档示例中有一个defaultcase语句switch.如果没有其他case语句匹配则调用它.在您自己的代码中,您没有这样的"后备".

因此,总会有至少一个被调用的语句,它将始终初始化monthString.