Когда ссылки объявляются в операторе переключения?

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

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

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

7
задан pgsandstrom 17 June 2010 в 07:56
поделиться

2 ответа

Ну, дело в скобках (то есть в размахе).

Возможно, лучше будет писать ваши операторы следующим образом:

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

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

7
ответ дан 7 December 2019 в 01:16
поделиться

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

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

    case 2: {
        String myString = "poo";
        System.out.println(myString);
    }
}
3
ответ дан 7 December 2019 в 01:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: