5 Stimmen

Compiler beschwert sich nicht, wenn ich eine Zeile mit zwei Semikolons beende. Warum?

Ich dachte, dass etwas Schlimmes passieren würde, wenn ich eine Zeile so beende. Aber der Compiler hat sich nicht einmal beschwert. Hat jemand eine Idee, warum das in Java legal ist?

displayDataMap.put("dateInterval", getDateInterval());;

Bearbeiten: Der Grund, warum Eclipse sich nicht beschwert hat, war, weil ich in preference->java->compiler->Errors/Warning das Leere Anweisung: als Ignorieren hatte.

Bildbeschreibung hier eingeben

11voto

stivlo Punkte 80006

Es handelt sich um eine leere Anweisung und ist gültig. Wie von jwodder angemerkt, um genauer zu sein, besteht die leere Anweisung aus dem Fehlen einer Anweisung zwischen den beiden Semikolons und kann durch zwei aufeinanderfolgende Semikolons oder durch durch Leerzeichen getrennte Semikolons dargestellt werden (einschließlich Zeilenumbrüchen).

IDEs wie Eclipse werden Sie darauf hinweisen. Überprüfen Sie das Bild unten, ich habe ein doppeltes Semikolon in Zeile 236 eingefügt. Die roten Linien wurden von mir hinzugefügt, um die Aufmerksamkeit zu lenken, aber Eclipse gibt viele visuelle Hinweise:

  • Ein gezackter gelber Strich unter den Semikolons.
  • Ein Glühbirnen-Symbol mit einem Warnzeichen am linken Rand von Zeile 236. Wenn Sie mit der Maus über diese Zeile fahren, wird eine kleine Nachricht mit der Aufschrift "Unnötiges Semikolon" angezeigt.
  • Auf der Leiste mit den Verzeichnissen und Paketen wird erneut das Warnzeichen angezeigt. Es wird für jeden Ordner oder Quellordner angezeigt, der mindestens eine Warnung enthält.
  • Auf dem Paket-Explorer und auf dem Navigator-Dateisymbol wird dasselbe Glühbirnen-Symbol angezeigt (nicht in diesem Screenshot).

Bildbeschreibung hier eingeben

2voto

nicholas.hauschild Punkte 41528

Der Compiler verwendet ein Semikolon, um ein 'Ende der Anweisung' anzugeben. Wenn zwei aufeinanderfolgende Semikolons vorhanden sind, wird die Anweisung vor dem ersten beendet und es wird dann eine zweite leere Anweisung erstellt.

Tatsächlich könnten Sie sogar dies tun:

displayDataMap.put("dateInterval", getDateInterval());;;;;;;;;;;;;;;

2voto

wormsparty Punkte 2443

Hier ist ein praktisches Beispiel in C:

#ifndef NDEBUG
#define Dprintf printf
#else
#define Dprintf(X)
#endif

if(some_test)
   Dprintf("Es ist wahr!");
else
   Dprintf("Es ist falsch.");

Wenn NDEBUG definiert ist, wird der Compiler sehen:

if(some_test)
   ;
else
   ;

Dies kann in einigen Fällen nützlich sein.

Da Java stark von C/C++ inspiriert ist, ist es etwas, das sie beibehalten haben, obwohl es nicht nützlich ist und es keinen Preprozessor gibt.

Sie können, wenn Sie möchten, den C-Präprozessor cpp auf Ihrem Code ausführen, um diese Art von Verhalten zu erreichen.

Einige Sprachen können sagen, dass es ein Fehler ist, es liegt an ihnen, zu wählen.

2voto

subodh Punkte 6036

; repräsentiert die leere Anweisung oder man kann sagen, dass es die Zeilenende einer Anweisung in Java darstellt, selbst wenn Sie mehr als eine verwenden, ist es in Java gültig. Der Compiler wird Ihnen keinen Fehler geben, weil dies gültig ist. Selbst die folgende Anweisung ist auch gültig:

System.out.println("HI");;;;;;;;

1voto

TheOneTeam Punkte 24512

; bedeutet Ende der Anweisung.

Für ;; wird das zweite ; bedeuten, dass die Anweisung aus nichts besteht.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X