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);

    }


}

所以,我给出了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);
    }
}
4

1 回答 1

13

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

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

于 2012-11-04T09:12:19.013 回答