Heim >Technologie-Peripheriegeräte >KI >Der Unterschied und die Verwendung von equal() und == in Java
In der Java-Entwicklung gibt es eine scheinbar einfache, aber im Internet viele Themen und Fragen: Was ist der Unterschied zwischen equal() und dem ==-Operator
Um diesen Unterschied besser zu verstehen, schauen wir uns ein Beispiel an:
String str1 = new String("Hello");String str2 = new String("Hello");System.out.println(str1.equals(str2)); // 输出 trueSystem.out.println(str1 == str2); // 输出 false
public boolean equals(Object obj) {return (this == obj);}Besondere Hinweise: Latin1 (auch bekannt als ISO 8859-1) und UTF-16 (Unicode Konvertierungsformat 16-Bit) sind zwei verschiedene ZeichenkodierungsmethodenLatin1 und UTF-16 sind zwei Kodierungsmethoden, aber der Unterschied ist nicht groß. Nehmen Sie die equal()-Methode von UTF-16, um zu sehen
public boolean equals(Object anObject) { //如果是同一个对象(即两个引用指向内存中的同一块地址),则直接返回trueif (this == anObject) {return true;} //如果是String类型的实例if (anObject instanceof String) { //Object类型的对象强制转换为String类型String aString = (String)anObject;//如果当前字符串对象和传入的字符串对象的编码方式相同if (coder() == aString.coder()) { //如果当前字符串和传入的字符串都是Latin1编码,则调用StringLatin1类的equals方法进行比较;如果其中一个或两个字符串是UTF16编码,则调用StringUTF16类的equals方法进行比较return isLatin1() ? StringLatin1.equals(value, aString.value): StringUTF16.equals(value, aString.value);}}return false;}Hinweis: Java8 Der Quellcode der equal()-Methode von Java11 unterscheidet sich von der equal()-Methode von JDK8
@HotSpotIntrinsicCandidatepublic static boolean equals(byte[] value, byte[] other) {if (value.length == other.length) {int len = value.length >> 1;for (int i = 0; i <div></div>1.2. Beispielbeschreibung<p></p>Beispiel 1: <p></p><pre class="brush:php;toolbar:false">public boolean equals(Object anObject) {// 如果是同一个对象(即两个引用指向内存中的同一块地址),则直接返回trueif (this == anObject) {return true;}// 如果是String类型的实例if (anObject instanceof String) {////Object类型的对象强制转换为String类型String anotherString = (String)anObject;int n = value.length;// 如果字符串长度相等if (n == anotherString.value.length) {char v1[] = value;char v2[] = anotherString.value;int i = 0;// 判断每个字符是否相等while (n-- != 0) {if (v1[i] != v2[i])return false;i++;}return true;}}return false;}Was ist das Ausgabeergebnis? Die Funktion „equals“ der String-Klasse besteht darin, ob der Inhalt der String-Objekte gleich ist. Da sie alle „Hallo“ sind, ist das Ergebnis wahr. Beispiel 2:
new String("hello").equals("hello")Was ist das Ausgabeergebnis?= = Ob die vom Operator verglichenen Objektadressen gleich sind, = = Die linke Seite ist das im Heap erstellte Objekt und die rechte Seite ist das String-Konstanten-Pool-Objekt. Obwohl der Inhalt gleich ist, sind die Adressen nicht gleich Das Ergebnis ist falsch. Beispiel 3:
new String("hello") == "hello";Ausgabeergebnis?h und ello befinden sich beide im String-Konstantenpool. Wenn der Compiler also auf den +-Operator stößt, wird er automatisch auf „Hallo“ optimiert, damit das Ergebnis wahr istBeispiel 5:
new String("hello") == new String("hello");Was ist das Ausgabeergebnis? ?new String("hello") Bei der Ausführung wird zunächst ein Objekt im String-Konstantenpool erstellt und dann das Objekt im Heap erstellt. Beim Ausführen der intern()-Methode wird festgestellt, dass das Objekt „Hallo“ ist ' existiert bereits im String-Konstantenpool, gibt also direkt die Objektreferenz im String-Konstantenpool zurück und vergleicht sie dann mit dem String-'Hallo'-Vergleich im Konstantenpool, sodass das Ergebnis wahr istEingehende Analyse von String.intern() hat die Gründe bereits vorgestellt2. Vergleich anderer Methoden
1. Methode Objects.equals(): Mit dieser statischen Methode kann verglichen werden, ob zwei Objekte gleich sind, und es ist nicht erforderlich, vor dem Aufruf festzustellen, ob das Objekt leer ist.
"hello" == "h"+"ello"
2. Die .contentEquals()-Methode der String-Klasse: Mit dieser Methode kann verglichen werden, ob eine Zeichenfolge einer beliebigen Zeichenfolge entspricht (z. B. StringBuffer, StringBuilder, String, CharSequence).
new String("hello").intern() == "hello"
Das obige ist der detaillierte Inhalt vonDer Unterschied und die Verwendung von equal() und == in Java. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!