2010-01-07 2 views
9

Mögliche Duplizieren:
Why this is not compiling in Java?Warum können Sie einem Integer in einer Schleife ohne geschweifte Klammern keinen int zuweisen?

In Java sind geschweifte Klammern für eine Zeile für Schleifen optional, aber ich habe einen Fall gefunden, wo es nicht erlaubt ist. Zum Beispiel dieser Code:

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

wird nicht kompiliert, aber wenn Sie geschweiften Klammern hinzufügen, etwa so:

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

es wird. Warum wird dieser Code nicht kompiliert?

+2

Interessanterweise fast genau die gleiche Frage vor einer Woche aufgetaucht. War das eine Interviewfrage? Edit: gefunden es http://stackoverflow.com/questions/1974641/why-this-is-not-compiling-in-java – BalusC

+0

Das ist ziemlich interessant. Welche Version von Java? Meine Vermutung ist, dass es wegen des Boxens ist. Aber es ist ein bisschen seltsam. –

+3

@silky: Es hat nichts mit Boxen zu tun. (Insbesondere ist das Boxen weit fortgeschritten und würde passieren, wenn 'a' auch vom Typ' int' wäre.) Es ist der Unterschied zwischen einem Anweisungsausdruck und einem Deklarations-Statement, wenn Speicher dient ... –

Antwort

11

Weil es nicht sinnvoll wäre, eine neue Variable in einer einzelnen Zeilenanweisung zu deklarieren, da sie sofort den Gültigkeitsbereich verlässt.

Wenn Sie die Definition eines statement in Java betrachten, enthält es kein LocalVariableDeclarationStatement, während ein block tut.

-2

Ich frage mich, ob es etwas damit zu tun hat, dass die folgende Aussage zusammengesetzt ist?

8

Wenn Sie keine geschweiften Klammern haben, können Sie keine Variablendeklaration eingeben. (Die Variable wäre nutzlos)

Siehe specification. (A LocalVariableDeclarationStatement kann nur auftreten, direkt innerhalb eines Block-.)

Verwandte Themen