Lassen Sie uns zunächst das Wissen über die Speicherzuordnung in JVM vorstellen:
(Empfohlenes Tutorial: Java-Kurs)
In JVM ist der Speicher in Heap-Speicher und Stapelspeicher unterteilt. Der Unterschied zwischen ihnen besteht darin, dass wir beim Erstellen eines Objekts (neues Objekt) den Konstruktor des Objekts aufrufen, um Platz freizugeben, die Objektdaten im Heap-Speicher zu speichern und gleichzeitig die entsprechende Referenz im Stapelspeicher zu generieren. Wenn wir es im nachfolgenden Code aufrufen, verwenden wir Referenzen im Stapelspeicher. Zu beachten ist außerdem, dass grundlegende Datentypen im Stapelspeicher gespeichert werden.
Erstes Verständnis des Unterschieds zwischen equal und ==:
== besteht darin, zu bestimmen, ob zwei Variablen oder Instanzen auf denselben Speicherbereich verweisen, während equal darin besteht, zu bestimmen, ob die Werte des Speicherbereichs auf den verweisen zwei Variablen oder Instanzen sind gleich. == bezieht sich auf den Vergleich von Speicheradressen und equal() vergleicht den Inhalt von Zeichenfolgen. == bezieht sich darauf, ob die Referenzen gleich sind, und equal() bezieht sich darauf, ob die Werte gleich sind.
Verwenden Sie ein Bild, um kurz die Beziehung zwischen ihnen zu zeigen:
Test:
Detaillierte Erklärung des Unterschieds zwischen gleich und ==:
== Der Vergleich befindet sich in der Variablen (Stapel) Speicher Anhand der (Heap-)Speicheradresse des gespeicherten Objekts wird ermittelt, ob die Adressen zweier Objekte gleich sind, also auf dasselbe Objekt verweisen. Was verglichen wird, ist die eigentliche Zeigeroperation. Equals wird verwendet, um zu vergleichen, ob der Inhalt zweier Objekte gleich ist. Da alle Klassen von der Klasse java.lang.Object erben, ist sie auf alle Objekte anwendbar die Klasse, aber die Methode equal in Object gibt ein ==-Urteil zurück.
String s="abcd" ist eine ganz besondere Form, die sich wesentlich von new unterscheidet. Dies ist die einzige Möglichkeit in Java, Objekte ohne neue zu generieren. Die Zuweisung in der Form String s="abcd"; wird in Java als direkte Variable bezeichnet. Sie befindet sich im Konstantenpool und nicht wie neu im komprimierten Heap.
Zeichenfolgen in dieser Form werden in der JVM festgehalten. Das heißt, nach der Deklaration einer solchen Zeichenfolge sucht die JVM zunächst im Konstantenpool, ob ein Objekt mit dem Wert „abcd“ vorhanden ist Das heißt, der ursprüngliche Verweis und der aktuelle Verweis verweisen auf dasselbe Objekt. Wenn nicht, wird beim nächsten Mal ein neuer „abcd“ erstellt "; wieder Zeigt s1 auf das Objekt „abcd“, also eine in dieser Form deklarierte Zeichenfolge. Solange die Werte gleich sind, verweisen alle Mehrfachreferenzen auf dasselbe Objekt.
Und String s = new String("abcd"); ist das gleiche wie jedes andere Objekt, solange es aufgerufen wird. Es kann auch so verstanden werden: String str = „hello“; Überprüfen Sie zunächst, ob sich im Speicher ein Objekt „hello“ befindet. Wenn ja, lassen Sie str auf dieses „hello“ zeigen.
Wenn kein „Hallo“ im Speicher vorhanden ist, erstellen Sie ein neues Objekt, um „Hallo“ zu speichern. String str=new String („Hallo“) bedeutet, dass unabhängig davon, ob das Objekt „Hallo“ bereits im Speicher vorhanden ist, erstellt wird ein neues Objekt, um es zu speichern.
Test:
Verwandte Empfehlungen: Erste Schritte mit Java
Das obige ist der detaillierte Inhalt vonErklären Sie im Detail den Unterschied zwischen gleich und ==. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!