-
Assurez-vous que vous êtes dans le répertoire ~/project
dans l'WebIDE.
-
Créez un nouveau fichier nommé Person.java
dans le répertoire ~/project
.
-
Ouvrez le fichier Person.java
et collez le code suivant pour la classe Person
:
public class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
// La méthode equals() par défaut (héritée de Object) ne vérifie que l'égalité de référence
// Nous devons la redéfinir pour vérifier l'égalité logique basée sur le nom et l'âge
@Override
public boolean equals(Object obj) {
// Étape 1 : Vérifier si les objets sont la même instance
if (this == obj) {
return true;
}
// Étape 2 : Vérifier si l'objet est null ou d'une classe différente
if (obj == null || getClass() != obj.getClass()) {
return false;
}
// Étape 3 : Convertir l'objet au bon type
Person person = (Person) obj;
// Étape 4 : Comparer les attributs pertinents
return age == person.age &&
name.equals(person.name); // Utiliser equals() pour comparer les chaînes de caractères
}
}
Dans cette classe Person
:
- Nous avons deux attributs privés :
name
(de type String
) et age
(de type int
).
- Nous avons un constructeur pour initialiser ces attributs.
- Nous avons des méthodes d'accès (getter) pour accéder aux attributs.
- Nous avons redéfini la méthode
equals()
. Examinons les étapes à l'intérieur de la méthode equals()
redéfinie :
if (this == obj)
: C'est une optimisation. Si les deux références pointent vers exactement le même objet, ils sont certainement égaux.
if (obj == null || getClass() != obj.getClass())
: Cela vérifie si l'objet comparé est null ou s'il n'est pas une instance de la classe Person
. Si l'une de ces conditions est vraie, ils ne peuvent pas être égaux.
Person person = (Person) obj;
: Nous convertissons l'objet générique Object
en un objet Person
pour pouvoir accéder à ses attributs name
et age
.
return age == person.age && name.equals(person.name);
: C'est le cœur de la comparaison logique. Nous vérifions si l'age
est le même (en utilisant ==
pour le type primitif int
) et si le name
est le même (en utilisant equals()
pour les objets String
).
-
Enregistrez le fichier Person.java
.
-
Maintenant, créons un autre fichier, PersonEqualityDemo.java
, pour tester notre méthode equals()
redéfinie. Créez ce fichier dans le répertoire ~/project
.
-
Ouvrez le fichier PersonEqualityDemo.java
et collez le code suivant :
public class PersonEqualityDemo {
public static void main(String[] args) {
Person person1 = new Person("Alice", 30);
Person person2 = new Person("Alice", 30);
Person person3 = new Person("Bob", 25);
Person person4 = person1;
System.out.println("Comparing Person objects:");
System.out.println("person1 == person2: " + (person1 == person2));
System.out.println("person1.equals(person2): " + person1.equals(person2));
System.out.println("person1 == person3: " + (person1 == person3));
System.out.println("person1.equals(person3): " + person1.equals(person3));
System.out.println("person1 == person4: " + (person1 == person4));
System.out.println("person1.equals(person4): " + person1.equals(person4));
}
}
Dans cette classe de démonstration, nous créons plusieurs objets Person
et les comparons en utilisant à la fois l'opérateur ==
et notre méthode equals()
redéfinie.
-
Enregistrez le fichier PersonEqualityDemo.java
.
-
Ouvrez le terminal. Assurez-vous que vous êtes dans le répertoire ~/project
.
-
Compilez les deux fichiers Java. Vous pouvez compiler plusieurs fichiers à la fois :
javac Person.java PersonEqualityDemo.java
Cela devrait créer les fichiers Person.class
et PersonEqualityDemo.class
.
-
Exécutez le programme de démonstration :
java PersonEqualityDemo
Vous devriez voir un résultat similaire à ceci :
Comparing Person objects:
person1 == person2: false
person1.equals(person2): true
person1 == person3: false
person1.equals(person3): false
person1 == person4: true
person1.equals(person4): true
Comme prévu, person1 == person2
est false
car ils sont des objets distincts, mais person1.equals(person2)
est true
car leur name
et leur age
sont les mêmes selon notre méthode redéfinie. person1
et person3
ne sont pas égaux selon les deux comparaisons. person1
et person4
sont égaux selon les deux comparaisons car ils font référence au même objet.