2011-05-18 15 views
6

Duplicar posibles:
Variable scope in a switch case¿Por qué objeto declarado después de que la etiqueta de un caso esté disponible en otros?

Tengo un código como el siguiente:

switch(a) { 
case b: 
Object o = new Object(); 
return o; 
case c: 
o = new Object(); 
return o; 
} 

y yo soy interesante por eso que es posible utilizar variables declaró después de la primera etiqueta del caso en el segundo, incluso si el primer estado nunca se alcanzará?

+0

Es un duplicado exacto, por lo tanto violar las reglas del SO. ¡Vergüenza! :) –

+0

@Jan - Sin conocer la palabra 'alcance' puede haber sido difícil encontrarlo. Sin vergüenza. :) – Ishtar

+0

Ok, retomando la palabra 'Vergüenza'. –

Respuesta

2

A pesar de estar en diferentes casos, las variables locales a la declaración switch están en el mismo bloque, lo que significa que están en el mismo ámbito.

Por lo que sé, el nuevo alcance en Java solo se crea en un nuevo bloque de código. Un bloque de código (con más de una línea) debe estar rodeado por llaves. El código en los casos de una instrucción switch es no rodeado de llaves, por lo que es parte del alcance de todo el enunciado.

Sin embargo, en realidad se puede introducir un nuevo alcance a la declaración mediante la adición de llaves:

switch (cond) { 
case 1:{ 
    Object o = new Object(); 
} 
    break; 
case 2:{ 
    // Object o is not defined here! 
} 
    break; 
} 
+0

Ahora dime que no lo copiaste de uno flagelado como duplicado :) –

+0

De hecho publiqué antes de ver el comentario. Dicho eso, debería ir allí y ver si queda algo por robar;) –

Cuestiones relacionadas