Para mi sorpresa este código funciona bien:¿Cuándo se declaran las referencias en una instrucción switch?
int i = 2;
switch(i) {
case 1:
String myString = "foo";
break;
case 2:
myString = "poo";
System.out.println(myString);
}
Pero la cadena de referencia nunca debe ser declarado? ¿Podría ser que todas las variables en cada caso siempre se declaran sin importar qué, o cómo se resuelve?
¿No están todas las declaraciones hechas al principio del {...} bloque que las contiene? –
Creo que Jules tiene razón. Java tiene ámbitos estáticos para que el flujo de control no influya en la creación (en oposición a la inicialización) de la variable. El lugar en la pila se asigna al ingresar al bloque de interruptores. Pero todavía es un poco curioso. GCC se niega a compilar el código C equivalente para la (creo) la misma razón por la que Java se niega a compilar 'if (someBool) String s =" foo ";' – musiKk