Возможный дубликат:
Почему переменные не локальны в операторах 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.)