Heim  >  Artikel  >  Java  >  Gleichheit von Java-Referenzvariablen und Objektgleichheit

Gleichheit von Java-Referenzvariablen und Objektgleichheit

巴扎黑
巴扎黑Original
2016-12-02 09:34:461849Durchsuche

Die Methoden „==“ und „equals()“ werden in Java häufig verwendet, um festzustellen, ob Objekte gleich sind. Lassen Sie uns darüber sprechen, wie Sie feststellen können, ob zwei Objekte gleich sind.
Jedes Objekt auf dem Heap hat seine Referenzvariable. Wenn es kein Objekt gibt, auf das die Referenzvariable verweist, kommt der GC auf dem Heap zurück, um mit ihm zu chatten.
Beim Vergleich von „==“ sind beide Seiten des Symbols Referenzvariablen des Objekts. Wenn der Vergleich „true“ zurückgibt, bedeutet dies, dass sich die Referenzvariablen auf beiden Seiten des Symbols auf dasselbe Objekt beziehen, da „==“. „ vergleicht Referenzvariablen. Der Wert darin, also ist der „==“-Vergleich ein Referenzvergleich.
Was aber, wenn zwei verschiedene Objekte verglichen werden, um festzustellen, ob sie die gleiche Bedeutung haben? Beispielsweise haben zwei Student-Objekte denselben Instanzvariablennamen und dasselbe Geschlecht. Können wir sie als zwei gleiche Objekte betrachten?
equals()-Methode
Dies erfordert die Verwendung der equal()-Methode. Zunächst müssen wir wissen, dass die equal()-Methode im Objekt, der übergeordneten Klasse aller Klassen, definiert ist. Die Vergleichsmethode von equal in Object ähnelt „==“. Sie gibt nur dann „true“ zurück, wenn es sich bei den beiden verglichenen Objekten um dasselbe Objekt handelt, andernfalls wird „false“ zurückgegeben. Wir werden also die Methode equal() in der Klasse überschreiben, um zu überprüfen, ob zwei verschiedene Objekte auf dem Heap die gleiche Bedeutung haben. Bevor wir die Methode equal() überschreiben, müssen wir die Methode hashcode() überschreiben, da wir dann equal aufrufen. ()-Methode vergleicht sie zunächst die von hashcode() zurückgegebenen Werte der beiden Objekte. Wenn sie nicht identisch sind, werden meiner Meinung nach false zurückgegeben, wenn wir die hashcode()-Methode überschreiben Typ wird zurückgegeben. Ein identischer Hashcode-Wert wird durch Deklaration eines Ergebnisvariablenwerts in der Methode hashcode() erhalten, zum Beispiel
[code="java"]public int hashCode() {
int result=17 ;
result= 31*result+name!=null?name.hashCode():0;
result=31*result+region!=null?region.hashCode():0; 31*result+position! =null?position.hashCode();
return result;
Kehren Sie dann zur Methode equal() zurück, um festzustellen, ob die Instanzvariablen der beiden Objekte übereinstimmen Wenn sie gleich sind, gibt die Methode equal() true zurück, wenn die Instanzvariablen unterschiedlich sind.
Wie müssen wir uns also die spezifische Klasse ansehen? , da die Instanzvariablen jeder Klasse unterschiedlich sind (wenn beim Erstellen eines neuen Objekts keine spezielle Struktur vorhanden ist). Funktionen und Instanzvariablen haben Standardwerte, sodass die beiden neu erstellten unterschiedlichen Typen ebenfalls gleich sind, da alle Instanzvariablen Standardwerte haben , also das Gleiche).

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn