Vergleich zwischen string.equals() vs == in Java
In Java gibt es zwei Arten von Objektvergleichen. Der erste ist der Operator ==
, der mit den Adressen arbeitet. Es vergleicht intern die Referenzen der Objekte. Andererseits vergleicht die Methode equals
den tatsächlichen Inhalt der Instanzen.
Unten ist der Codeblock, um die Operatoren und ihr Verhalten zu demonstrieren.
public class Main {
public static void main(String[] args) {
String str1 = "name";
String str2 = "name";
String str3 = new String("name");
System.out.println(str1.equals(str2));
System.out.println(str1 == str2);
System.out.println(str1.equals(str3));
System.out.println(str3 == str1);
}
}
Im obigen Codeblock werden drei Instanzen von string definiert. Die String-Klassen sind unveränderlich. Die Unveränderlichkeit bedeutet, dass die erstellte Instanz niemals überschrieben werden kann.
Darüber hinaus halten die Variablen den Speicher an der Heap-Position. Während die Zeichenkette name
erstellt wird, wird sie im Heap-Speicher gespeichert. Wenn eine andere neue Instanz, str2
mit demselben name
-Wert, initialisiert wird, erstellt die JVM keine weitere neue Adresse dafür. Stattdessen weist es die Referenz der Instanz str1
der Variablen str2
zu.
Die Tatsache hält den Beweis, wenn wir versuchen, str1==str2
mit den beiden String-Instanzen zu vergleichen. Die Aussage ergibt true
, da beide Referenzen auf dieselbe Namensadresse im Speicher verweisen. Die erläuterte Tatsache kann in der folgenden Abbildung besser verstanden werden.
Wenn die Methode equals
auf beide Instanzen angewendet wird, ergibt dies den booleschen Wert true
. Da die Funktion mit dem Inhaltsvergleich arbeitet, ist sie gleich.
Als nächstes wird eine weitere String-Variable str3
mit dem Schlüsselwort new
initialisiert. Die JVM erstellt intern einen neuen Platz im Heap-Speicher für die Adresse name
, anstatt die Instanz der Variablen str3
zuzuweisen. Wenn also der Inhaltsvergleich durchgeführt wird, gibt er true
für die Funktion equals
zurück. Es gibt false
zurück, wenn die Adresse mit dem Operator ==
verglichen wird.
Hier ist die Ausgabe des obigen Codeblocks.
true
true
true
false
Rashmi is a professional Software Developer with hands on over varied tech stack. She has been working on Java, Springboot, Microservices, Typescript, MySQL, Graphql and more. She loves to spread knowledge via her writings. She is keen taking up new things and adopt in her career.
LinkedInVerwandter Artikel - Java String
- So führen Sie die Konvertierung von String in String-Array in Java durch
- Wie entferne ich eine Unterzeichenkette aus einer Zeichenkette in Java
- So konvertieren Sie Byte-Array in Hex-String in Java
- Wie man Java-String in Byte konvertiert
- Generieren Sie eine zufällige Zeichenkette in Java
- Die Swap-Methode in Java