if-Statement
Kurz: Die grundlegende bedingte Verzweigung — ein Codeblock läuft nur, wenn eine boolesche Bedingung true ergibt.
Genauer: Die Bedingung in den Klammern muss in Java ein boolean sein — anders als z. B. in C reicht keine beliebige Zahl ungleich Null. Bei nur einer Anweisung im Block sind die geschweiften Klammern optional, aus Lesbarkeits- und Fehlervermeidungsgründen aber meist trotzdem empfehlenswert.
if (alter >= 18) {
System.out.println("Volljährig");
}Im Detail
int alter = 20;
// Geschweifte Klammern optional bei genau einer Anweisung - trotzdem empfohlen
if (alter >= 18)
System.out.println("Volljährig");
// Klassischer Anfängerfehler: das Semikolon direkt nach der Bedingung
if (alter >= 18); { // dieses ; beendet das if sofort - der Block läuft IMMER
System.out.println("Läuft immer, egal was alter ist!");
}
// Mehrere Bedingungen kombiniert
if (alter >= 18 && alter < 65) {
System.out.println("Im arbeitsfähigen Alter");
}Das versehentliche Semikolon direkt nach der if-Bedingung ist einer der klassischsten, schwer zu findenden Java-Anfängerfehler: if (bedingung); ist syntaktisch gültig (ein leeres Statement als “Körper” des if), wodurch der eigentlich gemeinte, nachfolgende Block IMMER läuft, unabhängig von der Bedingung — ohne Compiler-Fehler oder Warnung in älteren Java-Versionen. Moderne IDEs markieren dieses Muster meist als Warnung. Die verpflichtenden geschweiften Klammern für Blöcke mit mehreren Anweisungen (und die Konvention, sie auch bei nur einer Anweisung zu setzen) verhindert eine verwandte Fehlerklasse: fügt man später eine zweite Zeile zum “Block” hinzu, ohne Klammern zu ergänzen, gehört diese zweite Zeile syntaktisch NICHT mehr zum if und läuft immer.
Verschachtelte if-Statements
if-Statements lassen sich beliebig ineinander verschachteln, um mehrstufige Bedingungen abzubilden:
if (istEingeloggt) {
if (hatBerechtigung) {
System.out.println("Zugriff gewährt");
}
}Zwei unabhängige, aber gemeinsam geprüfte Bedingungen lassen sich äquivalent auch mit einem einzigen &&-verknüpften if schreiben (if (istEingeloggt && hatBerechtigung)) — funktional identisch, aber bei mehr als zwei-drei Bedingungen wird eine tief verschachtelte Struktur schnell unübersichtlich (“Pyramid of Doom”). Sogenannte “Guard Clauses” (frühes return, wenn eine Vorbedingung nicht erfüllt ist) sind in solchen Fällen oft die lesbarere Alternative, weil sie die Verschachtelungstiefe insgesamt reduzieren.
Boolesche Ausdrücke direkt zurückgeben
Ein häufiges Anfänger-Muster, das sich vereinfachen lässt:
// Umständlich
boolean istVolljaehrig;
if (alter >= 18) {
istVolljaehrig = true;
} else {
istVolljaehrig = false;
}
// Direkt, da der Vergleich selbst schon ein boolean liefert
boolean istVolljaehrig2 = alter >= 18;Ein if, das nur true/false je nach Bedingung zuweist oder zurückgibt, ist praktisch immer überflüssig — der Vergleichsoperator selbst liefert bereits den gewünschten booleschen Wert.
Siehe auch: if…else, Comparison Operators, Logical Operators