logo

Unterschied zwischen dem Vergleich von Strings mit der Methode == und der Methode .equals() in Java

Beide equal()-Methode und das == Operator werden verwendet, um zwei Objekte in Java zu vergleichen.

Der Java-String-equals()-Methode , vergleicht zwei Zeichenfolgen und gibt „true“ zurück, wenn alle Zeichen in beiden Zeichenfolgen übereinstimmen, andernfalls wird „false“ zurückgegeben.



Der == Operator vergleicht die Referenz oder den Speicherort von Objekten in einem Heap, unabhängig davon, ob sie auf denselben Speicherort verweisen oder nicht.
Immer wenn wir ein Objekt mit dem Operator erstellen neu , es wird ein erstellt neuer Speicherort für dieses Objekt. Daher verwenden wir den ==-Operator, um zu überprüfen, ob der Speicherort oder die Adresse zweier Objekte gleich sind oder nicht.

Im Allgemeinen sind sowohl die Operatoren equal() als auch == in Java werden zum Vergleichen von Objekten zur Überprüfung der Gleichheit verwendet. Hier sind jedoch einige Unterschiede zwischen den beiden:

  1. Der Hauptunterschied zwischen dem .equals()-Methode und das == Operator ist, dass das eine eine Methode und das andere der Operator ist.
  2. Wir können ==-Operatoren für den Referenzvergleich verwenden ( Adressvergleich ) und .equals() Methode für Inhaltsvergleich . In einfachen Worten: == prüft, ob beide Objekte auf denselben Speicherort verweisen, während .equals() den Vergleich der Werte in den Objekten auswertet.
  3. Wenn eine Klasse dies nicht tut Überschreiben Sie die Methode equal , dann wird standardmäßig die Methode equal(Object o) der nächstgelegenen übergeordneten Klasse verwendet, die diese Methode überschrieben hat. **Sehen Warum sollten die Methoden equal(Object) und hashCode() überschrieben werden? im Detail.

Beispiel:

String-equals()-Methode und ==-Operator in Java.



Java






// Java program to understand> // the concept of == operator> public> class> Test {> >public> static> void> main(String[] args)> >{> >String s1 =>'HELLO'>;> >String s2 =>'HELLO'>;> >String s3 =>new> String(>'HELLO'>);> >System.out.println(s1 == s2);>// true> >System.out.println(s1 == s3);>// false> >System.out.println(s1.equals(s2));>// true> >System.out.println(s1.equals(s3));>// true> >}> }>

>

>

Ausgabe

true false true true>

Erläuterung: Hier erstellen wir zwei Objekte, nämlich s1 und s2.

  • Sowohl s1 als auch s2 beziehen sich auf dieselben Objekte.
  • Wenn wir den ==-Operator für den Vergleich von s1 und s2 verwenden, ist das Ergebnis wahr, da beide die gleichen Adressen im haben Zeichenfolge konstanter Pool.
  • Bei Verwendung von „equals“ ist das Ergebnis wahr, da nur die in s1 und s2 angegebenen Werte verglichen werden.

Java-String-Pool

s1 = HALLO

s2 = HALLO

Java-Heap

s3 = HALLO

Lassen Sie uns beide Operatoren im Detail verstehen:

Gleichheitsoperator (==)

Wir können Gleichheitsoperatoren für jeden primitiven Typ anwenden, einschließlich des booleschen Typs. Wir können auch Gleichheitsoperatoren für Objekttypen anwenden.

Beispiel:

==-Operator in Java.

Java




// Java program to illustrate> // == operator for compatible data> // types> class> Test {> >public> static> void> main(String[] args)> >{> >// integer-type> >System.out.println(>10> ==>20>);> >// char-type> >System.out.println(>'a'> ==>'b'>);> >// char and double type> >System.out.println(>'a'> ==>97.0>);> >// boolean type> >System.out.println(>true> ==>true>);> >}> }>

>

>

Ausgabe

false false true true>

Wenn wir == für Objekttypen anwenden, dann dort sollte Kompatibilität zwischen Argumenttypen sein (entweder Kind zu Elternteil oder Elternteil zu Kind oder gleicher Typ). Andernfalls erhalten wir einen Fehler bei der Kompilierung.

Beispiel:

Java




// Java program to illustrate> // == operator for incompatible data types> class> Test {> >public> static> void> main(String[] args)> >{> >Thread t =>new> Thread();> >Object o =>new> Object();> >String s =>new> String(>'GEEKS'>);> >System.out.println(t == o);> >System.out.println(o == s);> >// Uncomment to see error> >System.out.println(t==s);> >}> }>

>

>

Ausgabe:

false false // error: incomparable types: Thread and String>

Java-String-equals()-Methode

In Java ist das String-equals()-Methode vergleicht die beiden angegebenen Strings basierend auf den Daten/Inhalten des Strings. Wenn alle Inhalte beider Zeichenfolgen gleich sind, ist es gibt true zurück . Wenn nicht alle Zeichen übereinstimmen, dann gibt false zurück .

Syntax:

Syntax : public boolean equal(Object anotherObject)

Parameter :

  • anotherObject- Zu vergleichende Zeichenfolge

Kehrt zurück:

  • Boolescher Wert :
    • WAHR- Wenn die Zeichenfolgen gleich sind
    • FALSCH- wenn Zeichenfolgen nicht gleich sind

Beispiel:

String-equals()-Methode in Java

Java




public> class> Test {> >public> static> void> main(String[] args)> >{> >Thread t1 =>new> Thread();> >Thread t2 =>new> Thread();> >Thread t3 = t1;> >String s1 =>new> String(>'GEEKS'>);> >String s2 =>new> String(>'GEEKS'>);> >System.out.println(t1 == t3);> >System.out.println(t1 == t2);> >System.out.println(s1 == s2);> >System.out.println(t1.equals(t2));> >System.out.println(s1.equals(s2));> >}> }>

CSS-Hintergrund

>

>

Ausgabe:

true false false false true>

Erläuterung: Hier verwenden wir die Methode .equals, um zu überprüfen, ob zwei Objekte dieselben Daten enthalten oder nicht.

  • Im obigen Beispiel erstellen wir 3 Thread-Objekte und 2 String-Objekte.
  • Im ersten Vergleich prüfen wir, ob t1 ​​== t3 oder nicht. Wie wir beide wissen t1 und t3 zeigen auf dasselbe Objekt . Deshalb gibt es true zurück.
  • Im zweiten Vergleich verwenden wir den Operator == zum Vergleichen der String-Objekte und nicht des Inhalts der Objekte. Hier sind beide Objekte unterschiedlich und daher ist das Ergebnis dieses Vergleichs falsch.
  • Wenn wir zwei String-Objekte mit dem Operator equal() vergleichen, prüfen wir, ob beide Objekte dieselben Daten enthalten oder nicht.
  • Beide Objekte enthalten denselben String, d. h. GEEKS. Deshalb gibt es true zurück.

Lesen Sie auch:

  • Methode Character.equals() in Java mit Beispielen
  • ==, Equals(), CompareTo(), EqualsIgnoreCase() und Compare()

Abschluss

Die Java-String-equals()-Methode und der ==-Operator werden beide zum Vergleichen von Zeichenfolgen in Java verwendet. In diesem Tutorial haben wir die Methoden ==operator und String equal() in Java anhand von Beispielen behandelt.

  Read More     String Methods in Java>

Unterschied zwischen der ==- und der .equals()-Methode – FAQs

1. Was ist der Unterschied zwischen str1 == str2 und str1 gleich str2?

In Java gibt str1==str2 true zurück, wenn str1 und str2 Zeichenfolgen mit demselben Inhalt sind. Dies liegt daran, dass Zeichenfolgen mit demselben Inhalt am selben Ort gespeichert werden.

str1.equals(str2) gibt true zurück, wenn str1 und str 2 unterschiedliche String-Objekte sind, aber denselben Inhalt haben.

2. Was ist der Unterschied zwischen == und equal beim String-Vergleich?

Der string-equals()-Methode vergleicht zwei Zeichenfolgen und gibt „true“ zurück, wenn alle Zeichen in beiden Zeichenfolgen übereinstimmen, andernfalls wird „false“ zurückgegeben.

Der ==-Operator vergleicht die Referenz oder den Speicherort von Objekten in einem Heap, unabhängig davon, ob sie auf denselben Ort verweisen oder nicht.

3. Welche Regeln gelten für die Methode equal()?

  1. Reflexivität: Für jedes Objekt x sollte x.equals(x) immer true zurückgeben.
  2. Symmetrie : Wenn x.equals(y) true zurückgibt, muss y.equals(x) auch true zurückgeben.
  3. Transitivität : Wenn x.equals(y) und y.equals(z) beide wahr sind, dann muss auch x.equals(z) wahr sein.
  4. Konsistenz : Mehrere Aufrufe von x.equals(y) sollten das gleiche Ergebnis zurückgeben.
  5. Nichtnichtigkeit: Die Methode equal() sollte im Vergleich zu null niemals „true“ zurückgeben.