Heim  >  Artikel  >  Java  >  So ermitteln Sie, ob Objekte in Java gleich sind

So ermitteln Sie, ob Objekte in Java gleich sind

王林
王林Original
2019-11-21 09:23:123789Durchsuche

So ermitteln Sie, ob Objekte in Java gleich sind

1. Die Rolle von Gleichheit und die Differenz von ==

Gleichheit wird verwendet, um zu bestimmen, ob zwei Objekte gleich sind.

equals wird normalerweise verwendet, um zu vergleichen, ob der Inhalt zweier Objekte gleich ist, und == wird verwendet, um zu vergleichen, ob die Adressen zweier Objekte gleich sind.

Die Methode equal entspricht standardmäßig „==".

Die Methode equal in der Object-Klasse wird definiert, um zu bestimmen, ob die Adressen zweier Objekte gleich sind (was so verstanden werden kann, dass es sich um dasselbe Objekt handelt. Wenn die Adressen gleich sind, werden die Objekte als gleich betrachtet). . Dies bedeutet, dass die Beurteilung, ob zwei Objekte gleich sind, gleichbedeutend ist mit „==“, d. h. ob die Adressen der beiden Objekte gleich sind, wenn nicht alle von uns erstellten neuen Klassen die Methode „equals“ überschreiben.

Die Methode equal in der Object-Klasse wird wie folgt implementiert:

public boolean equals(Object obj) {
        return (this == obj);
    }

Aber in unserer tatsächlichen Entwicklung wird normalerweise davon ausgegangen, dass die beiden Objekte gleich sind, wenn der Inhalt zweier Objekte gleich ist equal und equal gibt true zurück. Wenn die Objektinhalte unterschiedlich sind, wird false zurückgegeben.

Es kann also in zwei Situationen zusammengefasst werden

1. Wenn die Klasse die Equals-Methode nicht überschreibt, entspricht die Verwendung der Equals-Methode zum Vergleichen zweier Objekte einem ==-Vergleich Das heißt, zwei Objekte Die Adressen sind gleich. Wenn die Adressen gleich sind, geben Sie „true“ zurück; wenn die Adressen nicht gleich sind, geben Sie „false“ zurück.

2. Die Klasse überschreibt die Gleichheitsmethode. Beim Vergleich zweier Objekte wird die Beurteilungsmethode nach dem Überschreiben verwendet. Normalerweise schreiben wir „equals“ wie folgt um: Wenn die Inhalte der beiden Objekte gleich sind, gibt „equals“ „true“ zurück, und wenn die Inhalte unterschiedlich sind, gibt es „false“ zurück.

Zum Beispiel:

public class EqualTest {
public static void main(String[] args) {
Person p1 = new Person(10,"张三");
Person p2 = new Person(10,"张三");
System.out.println(p1.equals(p2));
}
}
class Person{
int age;
String name;
public Person(int age, String name) {
super();
this.age = age;
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}

Person überschreibt nicht die Methode „equals“, dann wird standardmäßig „equals“ im Objekt verwendet, bei dem es sich um die Speicheradressenbeurteilung der beiden Objekte (p1 und) handelt p2). p1 und p2 haben offensichtlich unterschiedliche Speicheradressen, daher ist das Ausgabeergebnis offensichtlich falsch.

Was passiert, wenn wir die Methode „equals“ überschreiben? Wir glauben, dass Personen mit demselben Namen und demselben Alter dieselbe Person sind, daher repräsentieren p1 und p2 beide den 10-jährigen Zhang San, und diese beiden Objekte sollten gleich sein. Die überschriebene Equals-Methode lautet wie folgt:

@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Person other = (Person) obj;
if (age != other.age)
return false;
if (name == null) {
if (other.name != null)
return false;
} else if (!name.equals(other.name))
return false;
return true;
}

In ähnlicher Weise ist das Ergebnis wahr, wenn der obige Anwendungsfall ausgeführt wird.

Übrigens: Wenn die Methode „equals“ „true“ zurückgibt, ist == dann auch wahr?

ist nicht unbedingt wahr. Es gibt zwei Möglichkeiten, dass Gleiche „true“ zurückgeben: Eine besteht darin, dass die Adressen der beiden Objekte gleich sind, und die andere darin, dass der Inhalt der beiden Objekte gleich ist. Wenn der Inhalt gleich ist, können die Adressen unterschiedlich sein, sodass das Ergebnis des ==-Vergleichs möglicherweise falsch ist.

Wir fügen die Beurteilung von == wie folgt zur Hauptmethode hinzu:

public static void main(String[] args) {
Person p1 = new Person(10,"张三");
Person p2 = new Person(10,"张三");
System.out.println(p1.equals(p2));
System.out.println(p1 == p2);
}

Das Ausgabeergebnis ist offensichtlich. Das Ergebnis von p1==p2 ist falsch.

Empfohlenes Tutorial: Java-Einführungs-Tutorial

Das obige ist der detaillierte Inhalt vonSo ermitteln Sie, ob Objekte in Java gleich sind. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

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