Christian Kruse: gleich und selbst

Beitrag lesen

Moin Jeena,

Mit Java habe ich keinerlei Erfahrung, würde mich aber schwerstens wundern, wenn der == Operator tatsächlich false ergäbe.
Wenn hier nicht die ausnahme der String-literals gewesen wäre dann hätte er durchaus false zurückgegeben.

Um das mal aufzuklären: der ==-Operator ist der Identitäts-Operator. Er prüft, ob Variable a auf dasselbe Objekt wie Variable b zeigt. Strings verweisen auf das gleiche Objekt, wenn sie als Literale angegeben wurden (das ist eine Optimierung der JVM) oder wenn man ein Konstrukt der Art

  
String a = new String();  
String b = a;  
if(a == b) {  
  System.out.println("Yay! Identisch!");  
}  

benutzt. Beachte: Strings in Java sind immutable. Ändert man einen String, so wird ein neues String-Objekt erzeugt:

  
String a = "abc";  
String b = a;  
b = b + "hulla";  
  
if(a != b) {  
  System.out.println("Meh, nicht identisch");  
}  

Es mögen vielleicht zwei unterschiedliche String-Objekte sein
Und genau das prüft der == Operator eigentlich. Für das was in JavaScript == macht gibt es in Java die String.isEqual(String)-Methode die man stattdessen unbedingt nutzen sollte.

s/isEqual/equals/
s/sollte/muss/

In Java ist equals() die Methode der Wahl, um auf Gleichheit zu prüfen. Zusätzlich implementieren einige Klassen (alle Basis-Datentypen z. B.) das Comparable-Interface, dass einen Stringvergleich (String a kommt bei alphabetischer Sortierung nach String b) erlaubt.

LG,
 CK