Vergleichsoperatoren und logische Operatoren — Java
Was ist das und wozu dient es?
Stell dir vor, du bist ein Roboter, der Entscheidungen trifft. Zum Beispiel: „Wenn es draußen regnet, dann nimm einen Regenschirm.“ Oder: „Wenn ich 100 Rubel habe UND ich möchte ein Eis, dann kaufe es.“ In der Programmierung helfen dabei Vergleichsoperatoren (sie vergleichen Zahlen oder Text) und logische Operatoren (sie verbinden mehrere Bedingungen zu einer).
In Java gibt es, wie im Leben, Fragen: „Ist die Zahl 10 größer als 5?“, „Sind zwei Wörter gleich?“, „Werden zwei Bedingungen gleichzeitig erfüllt?“ Die Antworten sind immer „ja“ (true) oder „nein“ (false). Das ist wie eine Ampel: Wenn sie grün ist (true) – gehen wir, wenn sie rot ist (false) – bleiben wir stehen.
Wozu braucht man das? Ohne sie könnte der Computer nicht selbstständig entscheiden, was in verschiedenen Situationen zu tun ist. Zum Beispiel in einem Spiel: Wenn der Spieler keine Leben mehr hat (Leben == 0), dann zeige „Game Over“ an. Oder in einem Taschenrechner: Wenn eine Zahl größer als 100 eingegeben wurde, dann gib eine Warnung aus. Vergleichsoperatoren und logische Operatoren sind die Grundlage jedes „intelligenten“ Programmverhaltens.
In Python ist es übrigens alles sehr ähnlich: Dort gibt es auch ==, !=, >, <, >=, <= und die logischen Operatoren and, or, not. Aber in Java gibt es einen wichtigen Unterschied: Zeichenketten (Text) werden nicht mit == verglichen, sondern mit einem speziellen Befehl .equals(). Das werden wir im Detail besprechen.
Codebeispiele mit Erklärung
Beispiel 1: Zahlenvergleich (einfaches „größer/kleiner“)
// Deklarieren von Variablen mit Zahlen
int alterPeter = 12;
int alterWasja = 14;
// Vergleichen: Ist Peter älter als Wasja?
boolean peterAelter = alterPeter > alterWasja;
System.out.println("Ist Peter älter als Wasja? " + peterAelter); // Gibt aus: false
// Vergleichen: Ist Peter jünger als Wasja?
boolean peterJuenger = alterPeter < alterWasja;
System.out.println("Ist Peter jünger als Wasja? " + peterJuenger); // Gibt aus: true
// Prüfen auf Gleichheit
boolean sieGleichAlt = alterPeter == alterWasja;
System.out.println("Sind sie gleich alt? " + sieGleichAlt); // Gibt aus: false
// Prüfen auf Ungleichheit
boolean unterschiedlichesAlter = alterPeter != alterWasja;
System.out.println("Ist das Alter unterschiedlich? " + unterschiedlichesAlter); // Gibt aus: true
Erklärung: Wir haben zwei Variablen mit Zahlen erstellt. Der Operator > prüft, ob die erste Zahl größer als die zweite ist. Wenn ja – Wert true, sonst false. Der Operator < macht das Gegenteil. == prüft auf Gleichheit (Achtung: zwei Gleichheitszeichen, nicht eines! Ein Zeichen ist die Zuweisung). != prüft, ob die Zahlen ungleich sind. Das Ergebnis jedes Vergleichs ist ein logischer Wert true oder false, den wir in einer Variable vom Typ boolean (logischer Typ) speichern.
Beispiel 2: Zeichenkettenvergleich (Text) – wichtiger Unterschied zu Python
String name1 = "Anna";
String name2 = "Anna";
String name3 = "Iwan";
// Zeichenketten mit equals vergleichen (nicht mit ==!)
boolean annaUndAnnaGleich = name1.equals(name2);
System.out.println("Sind Name1 und Name2 gleich? " + annaUndAnnaGleich); // true
boolean annaUndIwanGleich = name1.equals(name3);
System.out.println("Sind Name1 und Name3 gleich? " + annaUndIwanGleich); // false
// Vergleichen ohne Berücksichtigung der Groß-/Kleinschreibung
String name4 = "anna";
boolean ohneBeruecksichtigung = name1.equalsIgnoreCase(name4);
System.out.println("Anna und anna (ohne Berücksichtigung der Groß-/Kleinschreibung)? " + ohneBeruecksichtigung); // true
// So darf man es NICHT machen (warum – erklären wir bei den Fehlern)
boolean gefaehrlicherVergleich = (name1 == name2);
System.out.println("Mit ==: " + gefaehrlicherVergleich); // Kann true ausgeben, aber das ist zufällig!
Erklärung: In Java sind Zeichenketten keine einfachen Zahlen, sondern komplexe Objekte. Der Operator == prüft bei ihnen, ob die Zeichenketten an derselben Speicherstelle liegen, und nicht, ob ihr Text identisch ist. Deshalb verwendet man zum Textvergleich die Methode .equals(). Wenn du ohne Berücksichtigung von Groß-/Kleinschreibung vergleichen möchtest (z. B. „Anna“ und „anna“), verwende .equalsIgnoreCase(). In Python kann man übrigens für Zeichenketten == verwenden – dort funktioniert das korrekt. Aber in Java – denk daran: Zeichenketten nur mit equals!
Beispiel 3: Logische Operatoren – „UND“ (&&), „ODER“ (||), „NICHT“ (!)
int temperatur = 25;
boolean sonnig = true;
boolean esGibtWind = false;
// Prüfen einer komplexen Bedingung: "Spazieren gehen, wenn es warm UND sonnig ist"
boolean kannSpazierenGehen = (temperatur > 20) && sonnig;
System.out.println("Kann spazieren gehen? " + kannSpazierenGehen); // true (25 > 20 UND sonnig = true)
// Prüfen: "Eine Jacke mitnehmen, wenn es kalt ODER windig ist"
boolean jackeMitnehmen = (temperatur < 15) || esGibtWind;
System.out.println("Jacke mitnehmen? " + jackeMitnehmen); // false (NICHT kalt UND NICHT windig)
// "NICHT" verwenden: "Wenn es NICHT regnet, gehen wir spazieren"
boolean esRegnet = false;
boolean esRegnetNicht = !esRegnet; // ! macht false -> true
System.out.println("Regnet es nicht? " + esRegnetNicht); // true
// Komplexes Beispiel: "Zu Hause bleiben, wenn es kalt UND (Regen ODER Wind) ist"
int temperatur2 = 10;
boolean regen = true;
boolean wind = false;
boolean zuHauseBleiben = (temperatur2 < 15) && (regen || wind);
System.out.println("Zu Hause bleiben? " + zuHauseBleiben); // true (kalt UND Regen)
Erklärung: Logische Operatoren funktionieren wie in der Mathematik und im Leben. && (UND) ergibt true nur, wenn beide Bedingungen true sind. || (ODER) ergibt true, wenn mindestens eine Bedingung true ist. ! (NICHT) kehrt den Wert um: true wird false, false wird true. In Python ist es dasselbe, nur dass es mit Wörtern geschrieben wird: and, or, not. In Java werden Symbole verwendet, aber die Bedeutung ist absolut dieselbe. Klammern helfen, die Reihenfolge festzulegen: Zuerst wird das in Klammern berechnet, dann der Rest.
Beispiel 4: Verwendung in if-else (echte Entscheidungen)
int punkte = 85;
int bestehenPunktzahl = 70;
if (punkte >= bestehenPunktzahl) {
System.out.println("Du hast bestanden! Glückwunsch!");
} else {
System.out.println("Versuche es noch einmal.");
}