Heim >Java >javaLernprogramm >Wie kann ich die Methode equal() in Java für benutzerdefinierte Objektvergleiche ordnungsgemäß überschreiben?

Wie kann ich die Methode equal() in Java für benutzerdefinierte Objektvergleiche ordnungsgemäß überschreiben?

Barbara Streisand
Barbara StreisandOriginal
2024-12-27 08:16:09373Durchsuche

How to Properly Override the equals() Method in Java for Custom Object Comparisons?

Überschreiben der Equals-Methode in Java

In Java ist die Equals-Methode dafür verantwortlich, zu bestimmen, ob zwei Objekte gleich sind. Standardmäßig vergleicht die Methode „equals“ Objektreferenzen, was für viele benutzerdefinierte Klassen nicht das gewünschte Verhalten ist. Um die Methode „equals“ zu überschreiben und eine benutzerdefinierte Gleichheitssemantik zu definieren, sollten die folgenden Richtlinien befolgt werden:

  • Auf Null prüfen: Die Methode sollte zunächst prüfen, ob das übergebene Objekt null ist, und zurückgeben false, wenn dies der Fall ist.
  • Überprüfen Sie den Typ: Stellen Sie sicher, dass das übergebene Objekt vom gleichen Typ ist wie das aufrufende Objekt. Wenn nicht, geben Sie false zurück.
  • Felder vergleichen: Bestimmen Sie die relevanten Felder, die Gleichheit definieren, und vergleichen Sie ihre Werte.
  • Operatorpriorität verwenden: Verwenden Operatorpriorität, um sicherzustellen, dass potenzielle Nullwerte überprüft werden, bevor sie überprüft werden zugegriffen.

Lösung:

Der bereitgestellte Code hat versucht, ein Integer-Feld (Alter) mit der Methode „equals“ zu vergleichen, die nur für Strings gedacht ist. Um dies zu korrigieren, sollte die Gleichheitsprüfung für das Altersfeld durch einen Vergleich mit dem ==-Operator ersetzt werden:

...
} else {
    People otherPeople = (People) other;
    result = name.equals(other.name) && other.age == age;
}
...

Verwendung:

Der folgende Code demonstriert So verwenden Sie die überschriebene Equals-Methode:

...
// Add several Person objects to an ArrayList
people.add(new Person("Subash Adhikari", 28));
people.add(new Person("K", 28));
people.add(new Person("StackOverflow", 4));
people.add(new Person("Subash Adhikari", 28));

// Compare each pair of Person objects using the overridden equals method
for (int i = 0; i < people.size() - 1; i++) {
    for (int y = i + 1; y <= people.size() - 1; y++) {
        boolean check = people.get(i).equals(people.get(y));
        System.out.println("-- " + people.get(i).getName() + " - VS - " + people.get(y).getName());
        System.out.println(check);
    }
}
...

Dieser Code erzeugt Folgendes Ausgabe:

-- Subash Adhikari - VS - K false
-- Subash Adhikari - VS - StackOverflow false
-- Subash Adhikari - VS - Subash Adhikari true
-- K - VS - StackOverflow false
-- K - VS - Subash Adhikari false
-- StackOverflow - VS - Subash Adhikari false

Diese Ausgabe zeigt, dass die überschriebene Methode „equals“ die Personenobjekte basierend auf ihren Namens- und Altersfeldern korrekt vergleicht.

Das obige ist der detaillierte Inhalt vonWie kann ich die Methode equal() in Java für benutzerdefinierte Objektvergleiche ordnungsgemäß überschreiben?. 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