Heim  >  Artikel  >  Java  >  Java-Programm zum Vergleich zweier Objekte

Java-Programm zum Vergleich zweier Objekte

王林
王林nach vorne
2023-08-31 15:45:121109Durchsuche

Java-Programm zum Vergleich zweier Objekte

Einführung

In Java können Sie zum Vergleichen von Objekten die Methode equal() verwenden, die anhand der Eigenschaften des Objekts bestimmt, ob zwei Objekte gleich sind. Beim Vergleichen von Objekten in Java ist es sehr wichtig, die Methode equal() in der Klasse zu überschreiben, um sicherzustellen, dass der Vergleich auf den erforderlichen Eigenschaften basiert.

Dieses Java-Programm vergleicht zwei Objekte vom Typ Person, indem es die Methode equal() basierend auf ihren Namens- und Altersattributen überschreibt. Überprüfen Sie zunächst mit der Methode equal(), ob die Objekte zur gleichen Klasse gehören, und vergleichen Sie dann die Attribute name und age. Wenn beide Eigenschaften übereinstimmen, gibt die Methode „true“ zurück, was bedeutet, dass die Objekte gleich sind. Wenn eine der Eigenschaften unterschiedlich ist, gibt die Methode „false“ zurück, was darauf hinweist, dass die Objekte nicht gleich sind.

Methode

Es gibt zwei Standardmethoden

  • Verwenden Sie die Methode equal()

    • Nicht abgedeckt

    • Overlay verwenden

  • Verwenden Sie die Methoden hashCode() und equal()

Beispiel 1: Überschreiben der Methode equal()

Das Überschreiben der Methode equal() in einer Klasse ermöglicht benutzerdefinierte Vergleiche basierend auf den Eigenschaften des Objekts.

Methode

  • Wir definieren zunächst eine Person-Klasse, die zwei private Instanzvariablen enthält: Name und Alter.

  • Wir definieren einen Konstruktor für die Person-Klasse, der einen Namen und ein Alter akzeptiert und die Instanzvariablen mit diesen Werten initialisiert.

  • Wir haben die Methode equal() in der Person-Klasse überschrieben, um zwei Person-Objekte basierend auf Name und Alter zu vergleichen. Die Methode equal() akzeptiert einen Object-Parameter. Wir prüfen zunächst, ob der Parameter nicht leer und eine Instanz der Person-Klasse ist. Anschließend konvertieren wir dieses Objekt in ein Personenobjekt und vergleichen seine Namens- und Alterseigenschaften mit den Namens- und Alterseigenschaften des aktuellen Objekts.

  • In der main()-Methode erstellen wir zwei Person-Objekte mit unterschiedlichen Namen und Alterswerten.

  • Wir rufen die Methode equal() für das erste Person-Objekt auf und übergeben das zweite Person-Objekt als Parameter. Die Methode equal() gibt einen booleschen Wert zurück, der angibt, ob die beiden Objekte gleich sind.

  • Schließlich verwenden wir System.out.println(), um die Vergleichsergebnisse auf der Konsole auszudrucken

public class ObjectComparator {
    
   public static void main(String[] args) {
        
      // Create two objects to compare
      Person person1 = new Person("Alice", 25);
      Person person2 = new Person("Bob", 30);
        
      // Compare the two objects
      boolean areEqual = person1.equals(person2);
      System.out.println("Are the two objects equal? " + areEqual);
   }
}

class Person {
    
   private String name;
   private int age;
    
   public Person(String name, int age) {
      this.name = name;
      this.age = age;
   }
    
   @Override
   public boolean equals(Object obj) {
      if (obj == null) return false;
      if (!(obj instanceof Person)) return false;
      Person otherPerson = (Person) obj;
      return this.name.equals(otherPerson.name) && this.age == otherPerson.age;
   }
}
Die chinesische Übersetzung von

Erklärung

lautet:

Erklärung

In diesem Beispiel erstellen wir zwei Personenobjekte mit unterschiedlichen Namen und Altersstufen und rufen dann die Methode equal des ersten Objekts auf, um es mit dem zweiten Objekt zu vergleichen. Die Methode equal ist in der Person-Klasse definiert und prüft, ob beide Objekte die gleichen Namens- und Alterseigenschaften haben. Abschließend drucken wir die Ergebnisse des Vergleichs auf der Konsole aus.

Ausgabe

Are the two objects equal? false

Beispiel 2: Die Methode equal() nicht überschreiben

Die Methode equal() wird nicht überschrieben, Objekte werden anhand ihrer Referenzen und nicht anhand von Eigenschaften verglichen.

Methode

  • Wir definieren zunächst eine Person-Klasse, die zwei private Instanzvariablen enthält: Name und Alter.

  • Wir definieren einen Konstruktor für die Person-Klasse, der einen Namen und ein Alter akzeptiert und die Instanzvariablen mit diesen Werten initialisiert.

  • In der main()-Methode erstellen wir zwei Person-Objekte mit demselben Namen und denselben Alterswerten.

  • Wir rufen die Methode equal() für das erste Personenobjekt auf und übergeben das zweite Personenobjekt als Parameter. Da wir die Methode equal() in der Klasse Person nicht überschrieben haben, wird die Standardimplementierung der Methode equal() verwendet, die von der Klasse Object geerbt wurde. Die Implementierung prüft, ob die beiden Objekte dasselbe Objekt sind (d. h. dieselbe Speicheradresse haben) und gibt in diesem Fall „true“ zurück. Da die Objekte person1 und person2 unterschiedliche Speicheradressen haben, gibt die Methode equal() false zurück.

  • Schließlich verwenden wir System.out.println(), um die Vergleichsergebnisse auf der Konsole auszudrucken.

public class ObjectComparator {
    
   public static void main(String[] args) {
        
      // Create two objects to compare
      Person person1 = new Person("Alice", 25);
      Person person2 = new Person("Alice", 25);
        
      // Compare the two objects
      boolean areEqual = person1.equals(person2);
      System.out.println("Are the two objects equal? " + areEqual);
   }
}

class Person {
    
   private String name;
   private int age;
    
   public Person(String name, int age) {
      this.name = name;
      this.age = age;
   }
}
Die chinesische Übersetzung von

Erklärung

lautet:

Erklärung

In diesem Beispiel erstellen wir zwei Personenobjekte mit demselben Namen und demselben Alter und rufen dann die Methode equal auf, um das erste Objekt mit dem zweiten Objekt zu vergleichen. Da wir die Methode „equals“ in der Klasse „Person“ nicht überschrieben haben, wird die von der Klasse „Object“ geerbte Standardimplementierung verwendet. Diese Implementierung prüft, ob die beiden Objekte dasselbe Objekt sind (d. h. dieselbe Speicheradresse haben) und gibt in diesem Fall „true“ zurück. Da die Objekte person1 und person2 unterschiedliche Speicheradressen haben, gibt die Methode equal den Wert false zurück. Abschließend drucken wir die Ergebnisse des Vergleichs auf der Konsole aus.

Ausgabe

Are the two objects equal? false

Beispiel 3: Verwendung der Methoden hashCode() und equal()

Die Methode equal() wird nicht überschrieben, Objekte werden anhand ihrer Referenzen und nicht anhand von Eigenschaften verglichen.

Methode

  • Wir haben zwei Objekte der Personenklasse Person1 und Person2 mit demselben Namen und demselben Alter erstellt.

  • Wir rufen dann die Methoden hashCode() und equal() für person1 auf.

  • In der Person-Klasse überschreiben wir die Methode hashCode() und verwenden die Methode Objects.hash(), um einen Hash-Code basierend auf den Namens- und Altersattributen des Objekts zu generieren.

  • 然后我们重写equals()方法,根据它们的姓名和年龄属性来比较两个Person对象。该方法首先检查对象是否属于同一类,如果是,则使用Objects.equals()方法检查它们的姓名和年龄属性是否相等。

  • 在main()方法中,我们使用&&运算符通过hashCode()方法检查person1和person2的哈希码是否相同,并且通过equals()方法返回true。

  • 最后,我们打印出一个消息,指示这些对象是否相等。

public class ObjectComparator {
    
   public static void main(String[] args) {
        
      // Create two objects to compare
      Person person1 = new Person("Alice", 25);
      Person person2 = new Person("Alice", 25);
        
      // Compare the two objects using hashCode and equals methods
      boolean areEqual = person1.hashCode() == person2.hashCode() && person1.equals(person2);
      System.out.println("Are the two objects equal? " + areEqual);
   }
}

class Person {
    
   private String name;
   private int age;
    
   public Person(String name, int age) {
      this.name = name;
      this.age = age;
   }
    
   @Override
   public int hashCode() {
      return Objects.hash(name, age);
   }
    
   @Override
   public boolean equals(Object obj) {
      if (this == obj)
         return true;
      if (!(obj instanceof Person))
         return false;
      Person other = (Person) obj;
      return Objects.equals(name, other.name) && age == other.age;
   }
}

Explanation

的中文翻译为:

解释

在这个例子中,我们创建了两个具有相同姓名和年龄的Person对象,然后调用第一个对象的hashCode()和equals()方法来与第二个对象进行比较。

在Person类中,我们重写了hashCode()和equals()方法,以便根据它们的name和age属性来比较对象。hashCode()方法返回name和age属性的组合的哈希码,equals()方法检查对象是否属于同一类,并且具有相同的name和age属性。

最后,我们使用&&运算符来检查两个对象的哈希码是否相同,并且equals()方法是否返回true。如果两个条件都为true,我们打印出对象相等的信息。否则,我们打印出对象不相等的信息。

输出

The two person objects are equal

结论

  • 这个Java程序使用equals()方法来比较两个Person对象的属性,该方法已在Person类中被重写。

  • 该程序展示了定制对象比较的重要性,并突出了Java在实现自定义比较逻辑方面提供的灵活性。

Das obige ist der detaillierte Inhalt vonJava-Programm zum Vergleich zweier Objekte. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:tutorialspoint.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen