2010-01-07 14 views
9

Duplicar posible:
Why this is not compiling in Java?¿Por qué no puedes asignar un int a un entero en un bucle sin llaves?

en Java, las llaves son opcionales para una línea de bucles, pero he encontrado un caso en el que no está permitido. Por ejemplo, este código:

for(int i = 0; i < 10; i++) 
    Integer a = i; 

no se compilará, pero si se agrega llaves, así:

for(int i = 0; i < 10; i++){ 
    Integer a = i; 
} 

lo hará. ¿Por qué no compilará este código?

+2

Curiosamente, casi exactamente la misma pregunta surgió hace una semana. ¿Fue esta una pregunta de entrevista? Editar: lo encontré http://stackoverflow.com/questions/1974641/why-this-is-not-compiling-in-java – BalusC

+0

Eso es bastante interesante. ¿Qué versión de Java? Supongo que se debe al boxeo. Pero es un poco extraño. –

+3

@silky: no tiene nada que ver con el boxeo. (En particular, es anterior al boxeo por un largo camino y sucedería si 'a' fuera de tipo' int' también). Es la diferencia entre una declaración-declaración y una declaración-declaración si la memoria sirve ... –

Respuesta

11

Porque no tendría sentido declarar una nueva variable en una declaración de línea única, ya que sale inmediatamente del alcance.

Si observa la definición de statement en Java, no incluye LocalVariableDeclarationStatement, mientras que block sí lo hace.

-2

Me pregunto si tiene algo que ver con el hecho de que la siguiente declaración es compuesta.

for(int i = 0; i < 10; i++) 
    Integer a; 
    a = i; 
8

Si no tiene llaves, no puede poner una declaración de variable. (La variable sería inútil)

Ver el specification. (A LocalVariableDeclarationStatement sólo puede ocurrir directamente en el interior de un bloque de .)

Cuestiones relacionadas