Tengo una pregunta loca sobre los conmutadores Java.Declaración e inicialización de variables dentro de los conmutadores Java
int key = 2;
switch (key) {
case 1:
int value = 1;
break;
case 2:
value = 2;
System.out.println(value);
break;
default:
break;
}
Escenario 1 - Cuando el key
es dos se imprime con éxito el valor 2.
Escenario 2 - Cuando voy a comentar value = 2
en case 2:
que grazna diciendo que el El valor de la variable local no puede tener sido inicializado.
Preguntas:
Escenario 1: Si el flujo de ejecución no va a case 1:
(cuando el key = 2
), entonces ¿cómo sabe el tipo de la variable de valor como int
?
Escenario 2: si el compilador conoce el tipo de la variable de valor como int
, entonces debe haber accedido a la expresión int value = 1;
en case 1:
. (Declaración e inicialización). Entonces, ¿por qué sqawrk? Cuando voy a comentar value = 2
en case 2:
, diciendo El valor de la variable local puede no haberse inicializado.
No es una pregunta loca, es una muy buena pregunta. – biziclop
Posible duplicado del [Alcance de la variable en una caja de conmutadores] (http://stackoverflow.com/questions/3894119/variables-scope-in-a-switch-case) –
@PhilippeCarriere En realidad, creo que debería ser al revés - la respuesta aquí es mejor (incluso si la publicación es más reciente) ya que hay una referencia directa al JLS, y resume bien el problema cubierto en las diferentes respuestas en esa publicación. [Ver también] (http://meta.stackoverflow.com/questions/251938/should-i-flag-a-question-as-duplicate-if-it-has-received-better-answers). – Tunaki