9
votes

Pourquoi ne pouvez-vous pas affecter un int à un entier dans une boucle sans accolades bouclées?

Dupliqué possible:
Pourquoi cela ne compile pas en Java?

En Java, les accolades bouclées sont facultatives pour une ligne de boucle, mais j'ai trouvé un cas où il n'est pas autorisé. Par exemple, ce code: xxx

ne compile pas, mais si vous ajoutez des accolades bouclées, comme: xxx

Ce sera. Pourquoi ce code ne compilera-t-il pas?


7 commentaires

Fait intéressant, presque exactement la même question est tombée il y a une semaine. Était-ce une question d'entrevue? Edit: a trouvé cela Stackoverflow.com / Questions / 1974641 / ...


C'est assez intéressant. Quelle version de Java? Je suppose que c'est dû à la boxe. Mais c'est un peu étrange.


@silky: Ce n'est rien à voir avec la boxe. (En particulier, il prédit la boxe de loin et se produirait si a était de type int aussi.) C'est la différence entre une déclaration de déclaration et une déclaration de déclaration si La mémoire sert ...


C'est presque un dupliqué exact de Stackoverflow.com/Questtions/1974641/... - assez proche, imo.


Homme, ce serait une terrible question d'entrevue ...


@Jon Skeet & Balusc: Ce n'était pas une question d'entrevue, une collègue de la mine a rencontré accidentellement. Je n'ai pas trouvé l'autre question parce que "pourquoi ne compilera pas?" est un mauvais nom pour essayer de chercher contre.


Très intéressant en effet - c'est le genre de méchanceté que C ++ est populaire pour - cela devrait être quelque chose qui peut être clarifié pendant la compilation. J'espère sincèrement que ce n'était pas une véritable question d'entretien: D


3 Réponses :


-2
votes

Je me demande s'il a quelque chose à voir avec le fait que la déclaration suivante est composée?

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


0 commentaires

11
votes

Parce qu'il n'aurait pas de sens de déclarer une nouvelle variable dans une seule déclaration de ligne car elle dépasse immédiatement la portée.

Si vous regardez la définition d'un en Java, il n'inclut pas une localvariabledeclarationStatement, alors qu'un Block fait.


0 commentaires

8
votes

Si vous n'avez pas d'accolades bouclées, vous ne pouvez pas mettre dans une déclaration de variable. (La variable serait inutile)

Voir le Spécification . (A localvariabledeclarationStatement ne peut se produire directement à l'intérieur d'un bloc .)


0 commentaires