Obwohl die Frage nach den Java-Zeichenfolgen „==“ und „equals“ die grundlegendste Frage beim Java-Lernen ist, gibt es immer noch viele Studenten, die gerade erst Java gelernt haben, denen die Prinzipien nicht klar sind. Ich habe dieses Thema kürzlich mit meinen Freunden besprochen. Deshalb habe ich einen Artikel geschrieben, um Ihnen mein eigenes Verständnis mitzuteilen.
Schauen wir uns zunächst ein Beispiel an:
Kopieren Sie den Codecode wie folgt:
öffentliche Klasse TestStringEquals {
public static void main(String[] args) {
String a = „test“;
String b = „test“;
String c = new String("test");
String d = new String("test");
Zeichenfolge e = a;
String f = neuer String(a);
String g = a + "";
System.out.println(a == b ? "Ausdruck /"a==b/" ist wahr"
: "Ausdruck /"a==b/" ist falsch");
System.out.println(a == c ? "Ausdruck /"a==c/" ist wahr"
: "Ausdruck /"a==c/" ist falsch");
System.out.println(c == d ? "Ausdruck /"c==d/" ist wahr"
: „Ausdruck /“c==d/“ ist falsch“);
System.out.println(a == e ? "Ausdruck /"a==e/" ist wahr"
: "Ausdruck /"a==e/" ist falsch");
System.out.println(a == f ? "Ausdruck /"a==f/" ist wahr"
: "Ausdruck /"a==f/" ist falsch");
System.out.println(a == g ? "Ausdruck /"a==g/" ist wahr"
: "Ausdruck /"a==g/" ist falsch");
if (a.equals(b) && b.equals(c) && c.equals(d) && d.equals(e)
&& e.equals(f) && f.equals(g)) {
System.out
.println("a gleich b gleich c gleich d gleich e gleich f gleich g");
}
}
}
Wenn Sie die Antwort noch nicht haben, versuchen wir es. Können Sie garantieren, dass alles richtig ist?
Die Antwort wird unten bekannt gegeben:
Kopieren Sie den Codecode wie folgt:
Ausdruck „a==b“ ist wahr
Ausdruck „a==c“ ist falsch
Ausdruck „c==d“ ist falsch
Ausdruck „a==e“ ist wahr
Ausdruck „a==f“ ist falsch
Ausdruck „a==g“ ist falsch
<div style="text-align: left;"></div>a gleich b gleich c gleich d gleich e gleich f gleich g
Um diese Art von Problem gut zu verstehen, ist es am besten, ein tiefes Verständnis des Mechanismus und der Prinzipien der „==“-Methode und der „equals“-Methode von String in Java zu haben. Jeder muss wissen, dass „equals“ den Inhalt von Zeichenfolgen vergleicht. Da alle Zeichenfolgeninhalte im obigen Programm „test“ sind, sind sie alle gleich, wenn sie mit „equals“ verglichen werden.
Aber wissen Sie, dass die Methode equal und die Methode „==“ der Basisklasse Object in Java tatsächlich identisch sind? Es ist nur so, dass die String-Klasse, nachdem sie die Object-Klasse geerbt hat (alle Klassen in Java erben die Object-Klasse), die Methode equal überlädt, wodurch ein Vergleich des Inhalts der Zeichenfolge erfolgt.
Nachdem wir ein gutes Verständnis von „equals“ haben, wollen wir uns nun mit den Feinheiten der „==“-Methode befassen.
„==“ ist ein Operator in Java. Der Inhalt, den er vergleicht, sind die Zeiger zweier Objekte, also die Adresse des tatsächlichen Objekts. Daher ist es leicht zu verstehen, dass e==a true zurückgibt.
Schauen wir uns den Vergleich zwischen c und d noch einmal an. Wenn wir das neue Schlüsselwort sehen, bedeutet dies, dass sowohl c als auch d erneut eine Speicheradresse beantragt und dann den Wert „test“ zugewiesen haben, sodass c==d false zurückgibt. Es ist genauso verständlich
Die Operation „==“ zwischen a, c, d und f gibt alle „false“ zurück.
Schauen wir uns dann g= a + „“ an. Obwohl wir das neue Schlüsselwort nicht sehen, wird in der überladenen Methode definitiv ein neuer String hinzugefügt, sodass er wie oben aussieht Situation. Dann ist der Vergleich zwischen a und b am schwierigsten. Dies ist tatsächlich das Ergebnis der Optimierung des Java-Compilers, da String a = „test“ ist. Nachdem die Anweisung kompiliert wurde, wird „test“ in diesem String-Konstantenpool gespeichert. Wenn b dann erneut definiert wird, zeigt b immer noch auf diesen Bereich, sodass a und b immer noch auf denselben Bereich zeigen. Also gibt a==b true zurück.