Die equals() -Methode vergleicht den "Wert" in String-Instanzen (auf dem Heap) unabhängig davon, ob die beiden Objektreferenzen auf dieselbe String-Instanz verweisen oder nicht. Wenn sich zwei Objektreferenzen vom Typ String auf dieselbe String-Instanz beziehen, dann ist das großartig! Wenn sich die beiden Objektreferenzen auf zwei verschiedene String-Instanzen beziehen, macht das keinen Unterschied. Es ist der "Wert" (dh der Inhalt des Zeichenarrays) innerhalb jeder String-Instanz, die verglichen wird.
Auf der anderen Seite vergleicht der Operator "==" den Wert von zwei Objektreferenzen, um zu sehen, ob sie sich auf dieselbe String-Instanz beziehen. Wenn der Wert der beiden Objektreferenzen auf dieselbe String-Instanz verweist, wäre das Ergebnis des booleschen Ausdrucks "true" .. duh. Wenn andererseits der Wert beider Objektreferenzen "auf verschiedene String-Instanzen verweist" (obwohl beide String-Instanzen identische "Werte" haben, ist der Inhalt der Zeichen-Arrays jeder String-Instanz identisch) Ergebnis des booleschen Ausdrucks wäre "false".
Überprüfen Sie nun den Quellcode einer anderen equals() - Implementierung. Say: die in Integer – Gimby
Sie sind die gleichen für die Standard-'equals'-Implementierung von' Object'. Nicht für 'String' oder andere Klassen, die die Methode überschreiben. – Berger
Wenn Sie die Gleichheit vergleichen wollen, definieren Sie Ihre eigene Logik (wie sollte Java wissen, was zwei Objekte logisch gleich macht?). Dort überschreiben Sie 'equals' und definieren Ihre Logik, während der Standard' Object # equals' keinen logischen Vergleich haben kann, obwohl verglichen wird, ob beide Objekte auf dieselbe Instanz verweisen. – SomeJavaGuy