| 

.NET C# Java Javascript Exception

7
Um Zeichenketten zu vergleichen, kann ich in Java wahlweise mit den Methoden equals() und compareTo() oder alternativ mit den Operatoren == und != arbeiten. Ich arbeite mich gerade in Java ein frage mich, wo da der Unterschied ist und wann ich welche Vergleichsmethode nutzen sollte. Wer hat eine knappe Erklärung parat?
21.11.2011
Janosch Smutt 81 2
2 Antworten
5
== Vergleicht nicht den Inhalt, sondern nur die Objekt-ID, also bekommt du nur dann true, wenn du das selbe Objekt mit dem selben Objekt vergleichst.

equals vergleicht hingegen den Inhalt der Objekte.

System.out.println( "a" == "a" ); // true, da "a" auf das selbe Objekt verweisen (wegen Optimierung)
System.out.println( "a" == new String("a") ); // false, da 2 verschiedene Objekte.

System.out.println( "a".equals(new String("a")) ); // true, da selber Inhalt.


== und equals kannst du auf jedes Objekt verwenden (sind Teil der Objekt-Klasse).

compareTo gibt dir einen Integer zurück. Dieser sagt aus ob Objekt1 weniger, mehr oder gleichwertig mit Objekt2 ist. Diese Wertigkeit wird dazu benutzt um z.B. eine Liste mit Strings zu sortieren. Ist aber nur in Klassen, die Comparable implementieren verfügbar.
21.11.2011
LiRo 1,3k 8
3
equals und compareTo machen Wertvergleiche, == und != hingegen prüfen die Identität der einzelnen Objektinstanzen. Du kannst zwei verschiedene String-Objekte haben, die beide den gleichen Wert haben (z.B. "Hello"). Diese sind equal, aber nicht ==. Zwei Variablen vom Typ String können auf dieselbe Objektinstanz verweisen, oder auf zwei verschiedene Instanzen mit dem gleichen Wert.

String foo = new String("Hello");
String bar = new String("Hello");
String same = foo;
boolean test = foo.equals(bar); //true
test = foo == bar; //false
test = foo == same; //true
21.11.2011
Matthias Hlawatsch 8,4k 2 8

Stelle deine Java-Frage jetzt!