CodeGym /Kurse /JAVA 25 SELF /Operatorpriorität und Klammern in Bedingungen

Operatorpriorität und Klammern in Bedingungen

JAVA 25 SELF
Level 3, Lektion 4
Verfügbar

1. Einführung

Beginnen wir mit einer alltäglichen Analogie. Stellen Sie sich ein Rezept vor:

Mischen Sie Mehl, Eier und Zucker, schlagen Sie auf, fügen Sie Butter hinzu, schlagen Sie erneut auf.

Sieht seltsam aus? Stellen Sie sich nun vor, zwischen den Wörtern „schlagen“ und „hinzufügen“ stünde ein Komma oder Klammern. Die Reihenfolge der Schritte wird sofort klarer.

In der Programmierung entsteht eine ähnliche Situation, wenn Sie einen komplexen Ausdruck schreiben:

boolean result = a > 0 && b < 10 || c == 3;

Welche Reihenfolge? Was wird zuerst ausgewertet: a > 0 && b < 10, danach || c == 3? Oder alles umgekehrt?
Ohne eine klare Auswertungsreihenfolge kann der Computer die „Zutaten verwechseln“, und Ihr Ergebnis wird unerwartet sein.

2. Operatorpriorität in Java

Java (wie die meisten Programmiersprachen) verwendet eine feste Tabelle der Operatorprioritäten.
Operatoren mit höherer Priorität werden vor Operatoren mit niedrigerer Priorität ausgewertet.

Sehen wir uns den wichtigsten Ausschnitt dieser Tabelle an (für Bedingungen):

Operator Beschreibung Priorität
()
Klammern am höchsten
!
Logisches „Nicht“ hoch
==, !=
Gleich / ungleich mittel
<, >, <=, >=
Vergleiche mittel
&&
Logisches „Und“ niedriger
||
Logisches „Oder“ noch niedriger

(Es gibt auch arithmetische Operatoren – sie haben eine höhere Priorität als die logischen.)

Die Hauptregel

Die Operatoren „Und“ (&&) haben eine höhere Priorität als „Oder“ (||),
das heißt, zuerst wird „Und“ ausgewertet, dann „Oder“. Nicht umsonst ist Und eine logische Multiplikation, und Oder eine Addition.

Blockdiagramm der Auswertung von Bedingungen nach Priorität

graph LR
    A["a > 0"] --&&--> B["b < 10"]
    B --||--> C["c == 3"]

(In der Praxis: a > 0 && b < 10 || c == 3 – zuerst wird a > 0 && b < 10 berechnet, danach wird das Ergebnis mit c == 3 über || verknüpft.)

3. Auswertungsrichtung der Operatoren: von links nach rechts und umgekehrt

Neben der Priorität gibt es noch das Wort Assoziativität.
Es bestimmt, in welcher Richtung Operatoren ausgewertet werden, wenn sie „nebeneinander“ stehen und dieselbe Priorität haben.

Beispiel:

boolean a = true, b = false, c = true;
boolean result = a && b && c;

Frage: Wie wird das ausgewertet?
Antwort: Die Assoziativität von && ist von links nach rechts.
Das heißt, zuerst a && b, dann das Ergebnis mit c.

Für Bedingungen gilt:

Operator Assoziativität
&&, ||
von links nach rechts
!
von rechts nach links

4. Klammern – Ihr bester Freund bei komplexen Bedingungen

Hier beginnt die Magie (und die Rettung). Wenn Sie einen Ausdruck schreiben, ändern Klammern die Priorität und machen Ihren Code verständlicher und sicherer.

Beispiel 1 (ohne Klammern):

// Wir wollen: „Wenn der Benutzer volljährig und Staatsbürger ist, oder wenn er einen Sonderausweis hat“
boolean isAdult = age >= 18;
boolean isCitizen = country.equals("Belarus");
boolean hasPermit = hasSpecialPass == true;

if (isAdult && isCitizen || hasPermit)
{
    System.out.println("Zugriff erlaubt!");
}

So wertet Java aus:
Zuerst wird isAdult && isCitizen berechnet, danach wird das Ergebnis über || mit hasPermit verknüpft.

  • Nehmen wir an, isAdult = true, isCitizen = false, hasPermit = true
  • isAdult && isCitizen → true && false → false
  • false || true → true

Das heißt, wenn die Person einen Sonderausweis hat, wird sie ohnehin durchgelassen.
Und wenn sie keinen Sonderausweis hat, aber ein erwachsener Staatsbürger ist – wird sie ebenfalls durchgelassen.

Beispiel 2 (mit Klammern):

if (isAdult && (isCitizen || hasPermit))
{
    System.out.println("Zugriff erlaubt!");
}

Jetzt prüft das Programm zuerst: isCitizen || hasPermit, und danach diesen Wert zusammen mit isAdult.

Das heißt, Sie müssen volljährig sein und (entweder Staatsbürger sein oder einen Sonderausweis besitzen).
Ein kleiner Unterschied bei den Klammern – ein großer Unterschied in der Logik!

1
Aufgabe
JAVA 25 SELF, Level 3, Lektion 4
Gesperrt
Priorität logischer Operatoren 🌴
Priorität logischer Operatoren 🌴
1
Aufgabe
JAVA 25 SELF, Level 3, Lektion 4
Gesperrt
Verwendung von Klammern in logischen Ausdrücken 🎸
Verwendung von Klammern in logischen Ausdrücken 🎸
1
Aufgabe
JAVA 25 SELF, Level 3, Lektion 4
Gesperrt
Einlass zur geheimen Party 🤫
Einlass zur geheimen Party 🤫
1
Aufgabe
JAVA 25 SELF, Level 3, Lektion 4
Gesperrt
Bedingungen für die Kreditvergabe bei der Bank 💰
Bedingungen für die Kreditvergabe bei der Bank 💰
Kommentare
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION