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

So ermitteln Sie in Java, ob zwei Objekte gleich sind

尚
Original
2019-11-22 11:00:316163Durchsuche

So ermitteln Sie in Java, ob zwei Objekte gleich sind

Die Methode equal() kann in Java verwendet werden, um festzustellen, ob zwei Objekte gleich sind. Die Methode equal() wird verwendet, um eine Zeichenfolge mit einem angegebenen Wert zu vergleichen Objekt. Gibt „true“ zurück, wenn das angegebene Objekt gleich der Zeichenfolge ist; andernfalls „false“.

Der Quellcode dieser Methode lautet wie folgt:

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

Alle Objekte haben eine Identifikation (Speicheradresse) und einen Status (Daten) und „==" vergleicht die Speicheradressen der beiden Objekte Es wird also gesagt, dass die Verwendung der Methode equal() von Object dazu dient, zu vergleichen, ob die Speicheradressen zweier Objekte gleich sind. Das heißt, wenn object1.equals(object2) wahr ist, bedeutet dies, dass equal1 und equal2 tatsächlich auf das Objekt verweisen dasselbe Objekt.

Obwohl die Methode equal() von Object manchmal einige unserer Grundanforderungen erfüllen kann, müssen wir uns darüber im Klaren sein, dass wir die meiste Zeit zwei Objekte vergleichen. Dies ist jedoch nicht der Fall Tatsächlich ist es im JDK möglich, dass alle Kapselungsklassen wie String und Math die Methode equal() neu schreiben.

Das Folgende ist die equal()-Methode von String:

public boolean equals(Object anObject) {
    if (this == anObject) {
        return true;
    }
    if (anObject instanceof String) {
        String anotherString = (String)anObject;
        int n = count;
        if (n == anotherString.count) {
        char v1[] = value;
        char v2[] = anotherString.value;
        int i = offset;
        int j = anotherString.offset;
        while (n-- != 0) {
            if (v1[i++] != v2[j++])
            return false;
        }
        return true;
        }
    }
    return false;
    }

Für dieses Codesegment: if (v1[i++] != v2[j++]) return false; wir können es sehr deutlich sehen Die Methode equal() von String führt einen Inhaltsvergleich durch, keinen Referenzvergleich. Andere Kapselungsklassen sind ähnlich.

In der Java-Spezifikation muss die Verwendung der Methode equal() den folgenden Regeln folgen:

Die Methode equal implementiert Gleichheit für Nicht-Null-Objektreferenzen:

1. Reflexivität: Für jeden Referenzwert x ungleich Null sollte x.equals(x) true zurückgeben.

2. Symmetrie: Für alle Nicht-Null-Referenzwerte x und y sollte x.equals(y) genau dann true zurückgeben, wenn y.equals(x) true zurückgibt.

3. Transitivität: Für alle Nicht-Null-Referenzwerte x, y und z gilt: Wenn x.equals(y) true und y.equals(z) true zurückgibt, dann x.equals(z ) Sollte true zurückgeben.

4. Konsistenz: Für alle Nicht-Null-Referenzwerte x und y gibt der mehrmalige Aufruf von x.equals(y) immer true oder immer false zurück, vorausgesetzt, die im Gleichheitsvergleich verwendeten Informationen sind vorhanden Das Objekt wurde nicht überarbeitet.

5. Für jeden Referenzwert x ungleich Null sollte x.equals(null) false zurückgeben.

Für uns ist es am besten, die oben genannten Regeln bei der Verwendung einzuhalten, da sonst unerwartete Fehler auftreten.

Um in Java zu vergleichen, müssen wir die entsprechende Vergleichsmethode entsprechend der Art des Vergleichs auswählen:

1) Verwenden Sie im Objektfeld die Methode „equals“.

2) Typsichere Aufzählung, verwenden Sie equal oder ==.

3) Möglicherweise Nullobjektfelder: Verwenden Sie == und equal.

4) Array-Feld: Verwenden Sie Arrays.equals.

5) Primitive Datentypen außer Float und Double: Verwenden Sie ==.

6) Float-Typ: Verwenden Sie Float.foatToIntBits, um in den Typ int zu konvertieren, und verwenden Sie dann ==.

7) Double-Typ: Verwenden Sie Double.doubleToLongBit, um in einen Long-Typ zu konvertieren, und verwenden Sie dann ==.

Für weitere Java-Kenntnisse beachten Sie bitte das Java-Grundlagen-Tutorial.

Das obige ist der detaillierte Inhalt vonSo ermitteln Sie in Java, ob zwei Objekte 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