Когда ссылки объявляются в операторе switch? - PullRequest
7 голосов
/ 17 июня 2010

К моему удивлению, этот код работает нормально:

int i = 2;
switch(i) {
case 1:
    String myString = "foo";
    break;
case 2:
    myString = "poo";
    System.out.println(myString);
}

Но ссылка на строку никогда не должна объявляться? Может ли быть так, что все переменные в каждом случае всегда объявляются независимо от того, что или как это разрешается?

Ответы [ 2 ]

7 голосов
/ 17 июня 2010

Ну, это о скобках (т.е. объем).

Возможно, лучше написать ваши утверждения так:

int i = 2;
switch(i) {
    case 1: {
        String myString = "foo";
        break;
    }
    case 2: {
        myString = "poo";
        System.out.println(myString);
    }
}

(сейчас я не близок к компилятору Java, но это не должно компилироваться).

3 голосов
/ 17 июня 2010

Область объявления myString - это блок переключателя (где символ {).Если бы вы написали это так, объявление было бы для каждого случая:

int i = 2;
switch(i) {
    case 1: {
        String myString = "foo";
        break;
    }

    case 2: {
        String myString = "poo";
        System.out.println(myString);
    }
}
...