Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Switch statement uninitialized variable

The following code gives me : 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);

    }


}

So, I gave str a null value, and it worked but I'm still wondering why the one on the docs work without initializing the value first, I've triple checked and I don't think I have any typos:

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);
    }
}
like image 508
siaooo Avatar asked Nov 04 '12 09:11

siaooo


1 Answers

Because there's a default case statement in the switch of the documentation example. It's called if no other case statement matches. In your own code, you have no such "fallback".

Hence, there's always at least one statement that's called, which will always initialise monthString.

like image 196
J. Steen Avatar answered Sep 28 '22 01:09

J. Steen