Comparison Operators (Vergleichsoperatoren)
Kurz: Operatoren, die zwei Werte vergleichen und als Ergebnis immer einen Wahrheitswert (wahr/falsch) liefern — ==, !=, <, >, <=, >=.
Genauer: Bei primitiven Werten vergleicht == den tatsächlichen Wert; bei Referenztypen vergleicht == in vielen Sprachen dagegen nur, ob zwei Variablen auf dasselbe Objekt im Speicher verweisen, nicht ob die Objekte inhaltlich gleich sind — dafür braucht es meist eine spezielle Vergleichsmethode. Ergebnisse von Vergleichsoperatoren werden oft direkt in if-Bedingungen oder mit logischen Operatoren weiterverknüpft.
Im Detail
int a = 5, b = 5;
System.out.println(a == b); // true - primitive Werte, direkter Vergleich
String s1 = new String("hallo");
String s2 = new String("hallo");
System.out.println(s1 == s2); // false! - zwei verschiedene Objekte im Speicher
System.out.println(s1.equals(s2)); // true - inhaltlicher VergleichDieser Unterschied zwischen == (Referenzgleichheit bei Objekten) und einer inhaltlichen Vergleichsmethode wie .equals() gehört zu den häufigsten Fallstricken für Einsteiger in Sprachen wie Java — zwei Strings können exakt denselben Text enthalten und trotzdem als ==-”ungleich” gelten, wenn sie als zwei unabhängige Objektinstanzen erzeugt wurden. Die Faustregel: Bei Objekten (inklusive Strings) fast immer die dedizierte Vergleichsmethode verwenden, == nur, wenn man WIRKLICH prüfen will, ob es sich um dasselbe konkrete Objekt handelt.
Bei Gleitkommazahlen (double/float) ist == aus einem anderen Grund riskant: Durch die begrenzte Genauigkeit der internen Speicherung kann eine Berechnung, die mathematisch exakt 0.3 ergeben sollte, tatsächlich einen winzig abweichenden Wert liefern — ein direkter ==-Vergleich schlägt dann unerwartet fehl. Üblich ist stattdessen, zu prüfen, ob der Unterschied zwischen zwei Gleitkommazahlen kleiner als eine sehr kleine Toleranzgrenze ist.
Vergleichsoperatoren liefern immer genau einen Wahrheitswert zurück und lassen sich deshalb beliebig mit logischen Operatoren kombinieren, um komplexere Bedingungen zu bilden (alter >= 18 && hatAusweis).
Siehe auch: Operatoren, Logical Operators, if…else