Maison  >  Article  >  Java  >  Programme Java pour comparer deux objets

Programme Java pour comparer deux objets

王林
王林avant
2023-08-31 15:45:121105parcourir

Programme Java pour comparer deux objets

Présentation

En Java, vous pouvez utiliser la méthode equals() pour comparer des objets, qui détermine si deux objets sont égaux en fonction des propriétés de l'objet. Lors de la comparaison d'objets en Java, il est très important de remplacer la méthode equals() dans la classe pour garantir que la comparaison est basée sur les propriétés requises.

Ce programme Java compare deux objets de type Person en remplaçant la méthode equals() en fonction de leurs attributs name et age. Utilisez d'abord la méthode equals() pour vérifier si les objets appartiennent à la même classe, puis comparez les attributs name et age. Si les deux propriétés correspondent, la méthode renvoie true, indiquant que les objets sont égaux. Si l'une des propriétés est différente, la méthode renvoie false, indiquant que les objets ne sont pas égaux.

Méthode

Il existe deux méthodes standards

  • Utilisez la méthode equals()

    • Non couvert

    • Utiliser la superposition

  • Utilisez les méthodes hashCode() et equals()

Exemple 1 : Remplacement de la méthode equals()

Le remplacement de la méthode equals() dans une classe permet des comparaisons personnalisées basées sur les propriétés de l'objet.

Méthode

  • Nous définissons d'abord une classe Person, qui contient deux variables d'instance privées : le nom et l'âge.

  • Nous définissons un constructeur pour la classe Person qui accepte un nom et un âge et initialise les variables d'instance avec ces valeurs.

  • Nous avons remplacé la méthode equals() dans la classe Person pour comparer deux objets Person en fonction de leur nom et de leur âge. La méthode equals() accepte un paramètre Object. Nous vérifions d'abord si le paramètre n'est pas vide et s'il s'agit d'une instance de la classe Person. Nous convertissons ensuite cet objet en objet Person et comparons ses propriétés de nom et d'âge aux propriétés de nom et d'âge de l'objet actuel.

  • Dans la méthode main(), nous créons deux objets Person avec des noms et des valeurs d'âge différents.

  • Nous appelons la méthode equals() sur le premier objet Person, en passant le deuxième objet Person en paramètre. La méthode equals() renvoie une valeur booléenne indiquant si les deux objets sont égaux.

  • Enfin, nous utilisons System.out.println() pour imprimer les résultats de la comparaison sur la console

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;
   }
}
La traduction chinoise de

Explication

est :

Explication

Dans cet exemple, nous créons deux objets Person avec des noms et des âges différents, puis appelons la méthode equals du premier objet pour le comparer avec le deuxième objet. La méthode equals est définie dans la classe Person et vérifie si les deux objets ont les mêmes propriétés de nom et d'âge. Enfin, nous imprimons les résultats de la comparaison sur la console.

Sortie

Are the two objects equal? false

Exemple 2 : Ne pas remplacer la méthode equals()

La méthode equals() n'est pas remplacée, les objets sont comparés en fonction de leurs références plutôt que de leurs propriétés.

Méthode

  • Nous définissons d'abord une classe Person, qui contient deux variables d'instance privées : le nom et l'âge.

  • Nous définissons un constructeur pour la classe Person qui accepte un nom et un âge et initialise les variables d'instance avec ces valeurs.

  • Dans la méthode main(), nous créons deux objets Person avec les mêmes valeurs de nom et d'âge.

  • Nous appelons la méthode equals() sur le premier objet Person et passons le deuxième objet Person en tant que paramètre. Puisque nous n’avons pas remplacé la méthode equals() dans la classe Person, l’implémentation par défaut de la méthode equals() héritée de la classe Object est utilisée. L'implémentation vérifie si les deux objets sont le même objet (c'est-à-dire qu'ils ont la même adresse mémoire) et renvoie vrai si c'est le cas. Étant donné que les objets person1 et person2 ont des adresses mémoire différentes, la méthode equals() renvoie false.

  • Enfin, nous utilisons System.out.println() pour imprimer les résultats de la comparaison sur la console.

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;
   }
}
La traduction chinoise de

Explication

est :

Explication

Dans cet exemple, nous créons deux objets Person avec le même nom et le même âge, puis appelons la méthode equals pour comparer le premier objet avec le deuxième objet. Puisque nous n’avons pas remplacé la méthode equals dans la classe Person, l’implémentation par défaut héritée de la classe Object est utilisée. Cette implémentation vérifie si les deux objets sont le même objet (c'est-à-dire ont la même adresse mémoire) et renvoie vrai si c'est le cas. Étant donné que les objets person1 et person2 ont des adresses mémoire différentes, la méthode equals renvoie false. Enfin, nous imprimons les résultats de la comparaison sur la console.

Sortie

Are the two objects equal? false

Exemple 3 : Utilisation des méthodes hashCode() et equals()

La méthode equals() n'est pas remplacée, les objets sont comparés en fonction de leurs références plutôt que de leurs propriétés.

Méthode

  • Nous avons créé deux objets de classe Personne, personne1 et personne2, avec le même nom et le même âge.

  • Nous appelons ensuite les méthodes hashCode() et equals() sur person1.

  • Dans la classe Person, nous remplaçons la méthode hashCode() et utilisons la méthode Objects.hash() pour générer un code de hachage basé sur les attributs de nom et d'âge de l'objet.

  • 然后我们重写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在实现自定义比较逻辑方面提供的灵活性。

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer