Java if, else und else if
Steuern Sie den Programmfluss in Java mit if, else if und else und lernen Sie, Bedingungen sauber zu verschachteln.
Ein Programm, das immer dieselbe Abfolge von Anweisungen ausführt, ist wenig nützlich. if ist die Art, wie Java eine Frage stellt und entscheidet, was als Nächstes zu tun ist. Zusammen mit else if und else bildet es das Rückgrat jeder Entscheidung, die Ihr Code jemals treffen wird.
Das einfache if
if (condition) {
// runs only when condition is true
}Die Bedingung muss ein boolean-Ausdruck sein — keine truthy/falsy-Werte wie in JavaScript oder Python. if (1) lässt sich nicht kompilieren; if (count > 0) schon.
int age = 20;
if (age >= 18) {
System.out.println("You can vote.");
}Ein else hinzufügen
else liefert den alternativen Zweig — was ausgeführt wird, wenn die Bedingung false ist:
int age = 16;
if (age >= 18) {
System.out.println("You can vote.");
} else {
System.out.println("Too young to vote.");
}Genau einer der beiden Zweige wird ausgeführt. Es gibt kein Fall-through.
Verketten mit else if
Für mehr als zwei Ergebnisse können Sie else if verketten. Java prüft jede Bedingung von oben nach unten und führt den ersten Zweig aus, dessen Bedingung wahr ist; der Rest wird übersprungen:
int score = 72;
if (score >= 90) {
System.out.println("A");
} else if (score >= 80) {
System.out.println("B");
} else if (score >= 70) {
System.out.println("C");
} else {
System.out.println("F");
}Die Reihenfolge ist entscheidend. Wenn Sie die schwächste Bedingung zuerst platzieren, wird sie jeden nachfolgenden Fall verschlucken. Das obige Beispiel gibt C aus, weil score >= 70 die erste Übereinstimmung ist — obwohl score >= 60 ebenfalls wahr wäre, wenn es geprüft würde.
Geschweifte Klammern sind optional — aber verwenden Sie sie
Java erlaubt es, die Klammern wegzulassen, wenn ein Zweig aus einer einzelnen Anweisung besteht:
if (loggedIn)
showDashboard();
else
showLogin();Tun Sie das nicht. Verwenden Sie immer geschweifte Klammern. Die folgenden zwei Zeilen sehen gleich aus, verhalten sich aber unterschiedlich:
if (loggedIn)
showDashboard();
logActivity(); // ALWAYS runs — not part of the if!
if (loggedIn) {
showDashboard();
logActivity(); // both inside the if
}Der Preis für {} sind zwei Zeichen; der Preis für den Fehler ist Ihr Wochenende.
Boolean-Ausdrücke innerhalb von if
Die Bedingung kann alles sein, was zu boolean ausgewertet wird:
if (x > 0 && x < 100) { ... }
if (name.equals("admin")) { ... }
if (!list.isEmpty()) { ... }
if (user != null && user.isActive()) { ... }Beachten Sie, dass if eine Anweisung ist, kein Ausdruck: Es führt eine Aktion aus, erzeugt jedoch selbst keinen Wert, daher können Sie nicht int x = if (...) schreiben. Für die werterzeugende Variante greifen Sie zum Ternary Operator.
Das letzte Muster — zuerst die Null-Prüfung, dann ein Methodenaufruf — verwendet Kurzschlussauswertung. Wenn user null ist, wird user.isActive() nie aufgerufen. Siehe Logical Operators für &&, || und !, und Comparison Operators für >, == und verwandte Operatoren.
if-Anweisungen verschachteln
Sie können ein if in ein anderes if einfügen. Manchmal ist das die klarste Möglichkeit, eine Bedingung auszudrücken:
if (user != null) {
if (user.isAdmin()) {
System.out.println("Welcome, admin.");
} else {
System.out.println("Welcome, user.");
}
} else {
System.out.println("Please log in.");
}Tiefe Verschachtelung ist jedoch schwer zu lesen. Early returns bereinigen das meist:
if (user == null) {
System.out.println("Please log in.");
return;
}
if (user.isAdmin()) {
System.out.println("Welcome, admin.");
return;
}
System.out.println("Welcome, user.");Weniger Einrückung, leichter nachzuvollziehen.
Häufiger Fehler: = statt ==
Einsteiger, die von anderen Sprachen kommen, schreiben manchmal:
if (x = 5) { ... } // compile error= ist eine Zuweisung, == ist ein Vergleich. Anders als in C lehnt Java dies zur Kompilierzeit ab, sofern die Variable kein boolean ist — weil das Ergebnis von int x = 5 ein int ist, kein boolean. Das ist ein kleiner Vorteil, den Javas Typsystem Ihnen kostenlos bietet.
Ein ausgearbeitetes Beispiel
Die else if-Kette unten wandelt numerische Punktzahlen in Buchstabennoten um. Führen Sie es aus und überprüfen Sie die Ausgabe:
Es gibt aus:
95 -> A
82 -> B
71 -> C
68 -> D
45 -> FWann stattdessen switch verwenden
Eine lange else if-Kette, die eine Variable gegen eine Liste fester Werte prüft, ist oft als switch-Anweisung klarer. Verwenden Sie if/else if, wenn Zweige unterschiedliche Ausdrücke prüfen oder Bereiche verwenden (wie das obige Notenbeispiel); verwenden Sie switch, wenn Sie einen einzelnen Wert mit mehreren Konstanten vergleichen.
Was kommt als Nächstes
Für einzeilige bedingte Zuweisungen ist der Ternary Operator oft lesbarer als ein vollständiges if/else.