Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lernen Vergleich von Strings in Java | Zeichenketten
Einführung in Java

Vergleich von Strings in Java

Swipe um das Menü anzuzeigen

Beim Vergleichen zeigt Java ein etwas "niedrigeres" Verhalten als erwartet. Es erscheint offensichtlich, dass Zeichenketten genauso wie Zahlen verglichen werden könnten – mit ==. Schließlich, wenn zwei Zeichenketten identisch aussehen, warum sollten sie dann nicht gleich sein?

Das Problem mit ==

Wenn == mit Zeichenkettenliteralen verwendet wird, scheint es zunächst problemlos zu funktionieren:

Main.java

Main.java

1234567891011
package com.example; public class Main { public static void main(String[] args) { String order1 = "Latte"; String order2 = "Latte"; System.out.println(order1 == order2); } }

Beide Variablen verweisen auf dasselbe Objekt im internen String-Pool von Java – wenn das gleiche Literal erneut erscheint, verwendet Java das bereits existierende. Daher ergibt == den Wert true.

Nun ändern wir leicht, wie die Strings erstellt werden:

Main.java

Main.java

1234567891011
package com.example; public class Main { public static void main(String[] args) { String order1 = new String("Latte"); String order2 = new String("Latte"); System.out.println(order1 == order2); } }

Die Verwendung von new String() weist Java an, jedes Mal ein völlig separates Objekt zu erstellen – selbst wenn der Inhalt identisch ist. Da == Speicheradressen und nicht den Text vergleicht, ergibt es false.

Die wichtigste Regel: == betrachtet nicht den Text innerhalb des Strings – es prüft, ob beide Variablen auf exakt dasselbe Objekt im Speicher verweisen.

equals() — Vergleich des tatsächlichen Inhalts

Um den tatsächlichen Text in zwei Strings zu vergleichen, verwende .equals(). Der Speicherort wird dabei vollständig ignoriert, es werden nur die Zeichen verglichen:

Main.java

Main.java

1234567891011
package com.example; public class Main { public static void main(String[] args) { String order1 = new String("Latte"); String order2 = new String("Latte"); System.out.println(order1.equals(order2)); } }

Auch wenn order1 und order2 unterschiedliche Objekte im Speicher sind, vergleicht .equals() deren Inhalt und gibt true zurück.

Groß- und Kleinschreibung bei equals()

Java unterscheidet zwischen Groß- und Kleinschreibung, daher führen bereits Unterschiede in einem Buchstaben dazu, dass Zeichenketten als ungleich gelten:

Main.java

Main.java

1234567891011
package com.example; public class Main { public static void main(String[] args) { String order1 = "Latte"; String order2 = "latte"; System.out.println(order1.equals(order2)); } }

"Latte" und "latte" werden als unterschiedliche Zeichenketten behandelt, daher ist das Ergebnis false.

equalsIgnoreCase() — Vergleich ohne Berücksichtigung der Groß- und Kleinschreibung

Wenn Zeichenketten verglichen werden sollen, ohne auf Groß- oder Kleinschreibung zu achten, wird .equalsIgnoreCase() verwendet:

Main.java

Main.java

12345678910
package com.example; public class Main { public static void main(String[] args) { String order = "Latte"; System.out.println(order.equalsIgnoreCase("LATTE")); } }

.equalsIgnoreCase() behandelt "Latte" und "LATTE" als identisch und gibt true zurück.

question mark

Was vergleicht ==, wenn es mit Strings in Java verwendet wird?

Wählen Sie die richtige Antwort aus

War alles klar?

Wie können wir es verbessern?

Danke für Ihr Feedback!

Abschnitt 4. Kapitel 5

Fragen Sie AI

expand

Fragen Sie AI

ChatGPT

Fragen Sie alles oder probieren Sie eine der vorgeschlagenen Fragen, um unser Gespräch zu beginnen

Vergleich von Strings in Java

Beim Vergleichen zeigt Java ein etwas "niedrigeres" Verhalten als erwartet. Es erscheint offensichtlich, dass Zeichenketten genauso wie Zahlen verglichen werden könnten – mit ==. Schließlich, wenn zwei Zeichenketten identisch aussehen, warum sollten sie dann nicht gleich sein?

Das Problem mit ==

Wenn == mit Zeichenkettenliteralen verwendet wird, scheint es zunächst problemlos zu funktionieren:

Main.java

Main.java

1234567891011
package com.example; public class Main { public static void main(String[] args) { String order1 = "Latte"; String order2 = "Latte"; System.out.println(order1 == order2); } }

Beide Variablen verweisen auf dasselbe Objekt im internen String-Pool von Java – wenn das gleiche Literal erneut erscheint, verwendet Java das bereits existierende. Daher ergibt == den Wert true.

Nun ändern wir leicht, wie die Strings erstellt werden:

Main.java

Main.java

1234567891011
package com.example; public class Main { public static void main(String[] args) { String order1 = new String("Latte"); String order2 = new String("Latte"); System.out.println(order1 == order2); } }

Die Verwendung von new String() weist Java an, jedes Mal ein völlig separates Objekt zu erstellen – selbst wenn der Inhalt identisch ist. Da == Speicheradressen und nicht den Text vergleicht, ergibt es false.

Die wichtigste Regel: == betrachtet nicht den Text innerhalb des Strings – es prüft, ob beide Variablen auf exakt dasselbe Objekt im Speicher verweisen.

equals() — Vergleich des tatsächlichen Inhalts

Um den tatsächlichen Text in zwei Strings zu vergleichen, verwende .equals(). Der Speicherort wird dabei vollständig ignoriert, es werden nur die Zeichen verglichen:

Main.java

Main.java

1234567891011
package com.example; public class Main { public static void main(String[] args) { String order1 = new String("Latte"); String order2 = new String("Latte"); System.out.println(order1.equals(order2)); } }

Auch wenn order1 und order2 unterschiedliche Objekte im Speicher sind, vergleicht .equals() deren Inhalt und gibt true zurück.

Groß- und Kleinschreibung bei equals()

Java unterscheidet zwischen Groß- und Kleinschreibung, daher führen bereits Unterschiede in einem Buchstaben dazu, dass Zeichenketten als ungleich gelten:

Main.java

Main.java

1234567891011
package com.example; public class Main { public static void main(String[] args) { String order1 = "Latte"; String order2 = "latte"; System.out.println(order1.equals(order2)); } }

"Latte" und "latte" werden als unterschiedliche Zeichenketten behandelt, daher ist das Ergebnis false.

equalsIgnoreCase() — Vergleich ohne Berücksichtigung der Groß- und Kleinschreibung

Wenn Zeichenketten verglichen werden sollen, ohne auf Groß- oder Kleinschreibung zu achten, wird .equalsIgnoreCase() verwendet:

Main.java

Main.java

12345678910
package com.example; public class Main { public static void main(String[] args) { String order = "Latte"; System.out.println(order.equalsIgnoreCase("LATTE")); } }

.equalsIgnoreCase() behandelt "Latte" und "LATTE" als identisch und gibt true zurück.

War alles klar?

Wie können wir es verbessern?

Danke für Ihr Feedback!

Abschnitt 4. Kapitel 5
some-alt