Java bietet verschiedene Möglichkeiten zum Vergleichen von Strings, jede mit eigenen Stärken und Schwächen. Die beste Methode hängt davon ab, ob ein Groß-/Kleinschreibung-sensitiver Vergleich benötigt wird, ob auf Gleichheit geprüft wird oder die lexikografische Ordnung bestimmt werden soll. Diese Anleitung klärt die gängigsten Ansätze.
Inhaltsverzeichnis
- Verwendung der
compareTo()
-Methode - Der
==
-Operator - Die
equals()
-Methode - Groß-/Kleinschreibung und
equalsIgnoreCase()
- Die
contentEquals()
-Methode
1. Vergleichen von Strings mit compareTo()
Die compareTo()
-Methode bietet einen lexikografischen Vergleich. Sie gibt zurück:
0
: Wenn die Strings gleich sind.- Einen negativen Wert: Wenn der aufrufende String dem Argument-String lexikografisch vorangeht.
- Einen positiven Wert: Wenn der aufrufende String dem Argument-String lexikografisch folgt.
Dieser Vergleich ist Groß-/Kleinschreibung-sensitiv; Großbuchstaben gehen Kleinbuchstaben voraus.
String str1 = "apple";
String str2 = "banana";
String str3 = "Apple";
int result1 = str1.compareTo(str2); // result1 wird negativ sein
int result2 = str1.compareTo(str3); // result2 wird negativ sein (Groß-/Kleinschreibung-sensitiv)
int result3 = str1.compareTo("apple"); // result3 wird 0 sein
2. Der ==
-Operator
Der ==
-Operator vergleicht Referenzen, nicht den String-Inhalt. Er prüft, ob zwei String-Variablen auf dieselbe Speicheradresse verweisen. Dies ist in der Regel nicht das gewünschte Verhalten beim Vergleichen von String-Werten.
String str1 = "hello";
String str2 = "hello";
String str3 = new String("hello");
System.out.println(str1 == str2); // Oft true aufgrund von String-Interning
System.out.println(str1 == str3); // false (verschiedene Objekte)
Während str1 == str2
aufgrund von Java’s String-Interning oft true
zurückgibt, ist das Verlassen darauf unzuverlässig. Verwenden Sie immer equals()
für den Inhaltsvergleich.
3. Die equals()
-Methode
Die equals()
-Methode ist der empfohlene Ansatz zum Vergleichen von String-Inhalten. Sie vergleicht Zeichen, ohne die Speicherorte zu berücksichtigen.
String str1 = "hello";
String str2 = "hello";
String str3 = new String("hello");
System.out.println(str1.equals(str2)); // true
System.out.println(str1.equals(str3)); // true
4. Groß-/Kleinschreibung und equalsIgnoreCase()
equals()
ist Groß-/Kleinschreibung-sensitiv. „hello“ und „Hello“ werden als unterschiedlich betrachtet. Für Groß-/Kleinschreibung-insensitive Vergleiche verwenden Sie equalsIgnoreCase()
.
String str1 = "hello";
String str2 = "Hello";
System.out.println(str1.equals(str2)); // false
System.out.println(str1.equalsIgnoreCase(str2)); // true
5. Die contentEquals()
-Methode
contentEquals()
ähnelt equals()
, erlaubt aber den Vergleich eines Strings mit anderen CharSequence
-Objekten (wie StringBuffer
oder StringBuilder
).
String str1 = "hello";
StringBuffer str2 = new StringBuffer("hello");
System.out.println(str1.contentEquals(str2)); // true
Dies bietet Flexibilität, aber für einfache String-zu-String-Vergleiche wird equals()
aus Gründen der Lesbarkeit bevorzugt.
Zusammenfassend lässt sich sagen: Wählen Sie die geeignete Methode je nach Bedarf aus: compareTo()
für die lexikografische Ordnung, equals()
für die Groß-/Kleinschreibung-sensitive Inhaltsgleichheit, equalsIgnoreCase()
für die Groß-/Kleinschreibung-insensitive Gleichheit und contentEquals()
zum Vergleichen von Strings mit anderen CharSequence
-Objekten. Vermeiden Sie die Verwendung von ==
zum Vergleichen von String-Inhalten.