Dupliqué possible: strong>
Pourquoi cela ne compile pas en Java? P>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: p>
xxx pré> ne compile pas, mais si vous ajoutez des accolades bouclées, comme: p>
xxx pré> Ce sera. Pourquoi ce code ne compilera-t-il pas? P> BlockQuote>
3 Réponses :
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;
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. P>
Si vous regardez la définition d'un en Java, il n'inclut pas une localvariabledeclarationStatement, alors qu'un Block fait. P>
Si vous n'avez pas d'accolades bouclées, vous ne pouvez pas mettre dans une déclaration de variable. (La variable serait inutile) p>
Voir le Spécification . (A localvariabledeclarationStatement em> ne peut se produire directement à l'intérieur d'un bloc em>.) P>
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 code> était de typeint code> 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 i> 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