Возможный дубликат:
Почему переменные не локальны в операторах case?
Переменная, определенная в блоке области видимости, не может использоваться вне нее. Например, следующий фрагмент кода недействителен:
{
int anothervar = 4;
}
{
System.out.println(anothervar);
}
Но похоже, что блок case
не создает отдельные области.
switch (mode) {
case ONE:
dosomething();
return;
case TWO:
int[] someints = new int[] { 2, 3, 5, 7 };
SomeObject obj = new SomeObject();
return;
case THREE:
someints = new int[] { 1, 4, 6, 8, 9 };
obj = new SomeObject();
return;
}
Почему мне не нужно объявлять someints
внутри блока case THREE
?
Предположим mode = THREE
, тогда объявление переменной someints
никогда не будет достигнуто, потому что case TWO
, где объявлено someints
, пропускается. Или не так ли? Как это работает внутри?
(Выбранный ответ в Почему переменные не локальны в операторах case? утверждает, что оператор switch является внутренним набором команд jump
, но все же это делает не объяснять, где объявлена переменная someints
.)