Montag, 6. August 2007

Java Strings vergleichen

Im JavaForum taucht mindestens zweimal in der Woche die Frage auf, warum denn in Java
ein String Vergleich mit einem == nicht zum gewünschten Ergebnis führt


public class FalscherStringVergleich
{
String a="Hallo";
String b="Hallo";

public static void main(String[] args)
{
//Die Ausgabe ist false
System.out.println(a==b);

}

}


Die Ausgabe ist false obwohl beide Strings den gleichen Inhalt haben und eigentlich true sein sollte. Warum ist das so?
Der Vergleich mit a==b prüft nicht auf den Inhalt der Stringobjekte sondern auf den Speicherplatz wo diese sich im Ram befinden.
Da der String a und der String b verschiedene Objekte der Klasse String sind, befinden sie sich natürlich nicht auf der selben Speicherstelle im Ram und deshalb liefert der Vergleich false was soviel aussagt, dass sich beide Objekte nicht auf dem selben Platz befinden.

Doch wie prüft man jetzt ob zwei Strings denselben Inhalt haben?

Mit equals() oder mit equalsIgnoreCase()
Equals() liefert true wenn der Inhalt zweier Strings gleich ist, also beispielsweise wenn a="Hallo" und b="Hallo" ist.
Spielt die Großschreibung bzw. Kleinschreibung keine Rolle so wählt man equalsIgnoreCase() die true liefert beispielsweise für a="Hallo" und b="hallo". Die Methode equals() würde in diesem Fall false liefern.


equals()

public class RichtigerStringVergleichEquals
{
String a="Hallo";
String b="Hallo";

public static void main(String[] args)
{
//Die Ausgabe ist true
System.out.println(a.equals(b));

}

}



equalsIgnoreCase()

public class RichtigerStringVergleichEqualsIgnoreCase
{
String a="Hallo";
String b="hallo";

public static void main(String[] args)
{
//Die Ausgabe ist true
System.out.println(a.equalsIgnoreCase(b));

}

}