Que fait la méthode equals() en Java?
sobes.tech IA
Réponse de l'IA
La méthode equals() en Java est utilisée pour comparer le contenu de deux objets. Par défaut, dans la classe Object, elle compare les références des objets, c'est-à-dire détermine si deux variables pointent vers le même objet en mémoire.
Cependant, la plupart des classes en Java (par exemple, String, Integer) redéfinissent cette méthode pour comparer les valeurs contenues dans les objets, plutôt que leurs références.
Lors de la redéfinition de equals(), il est important de respecter son contrat :
- Réflexivité :
x.equals(x)doit êtretruepour toutxnon nul. - Symétrie :
x.equals(y)doit êtretruesi et seulement siy.equals(x)esttruepour toutxetynon nuls. - Transitivité : Si
x.equals(y)ety.equals(z)sonttrue, alorsx.equals(z)doit également êtretruepour toutx,y,znon nuls. - Cohérence : Plusieurs appels à
x.equals(y)doivent retourner le même résultat, tant que les objets ne changent pas. - Pour tout
xnon nul,x.equals(null)doit êtrefalse.
Exemple de redéfinition de equals() :
class MyObject {
private int value;
public MyObject(int value) {
this.value = value;
}
@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (obj == null || getClass() != obj.getClass()) {
return false;
}
MyObject myObject = (MyObject) obj;
return value == myObject.value;
}
}
Utilisation de equals() :
// Comparaison par référence (par défaut dans Object)
Object obj1 = new Object();
Object obj2 = new Object();
boolean parReference = obj1.equals(obj2); // false
// Comparaison par valeur (dans `equals` redéfini)
MyObject myObj1 = new MyObject(10);
MyObject myObj2 = new MyObject(10);
boolean parValeur = myObj1.equals(myObj2); // true
Il est également important de redéfinir la méthode hashCode() lors de la redéfinition de equals(), afin de préserver leur contrat et d'éviter des problèmes avec des collections utilisant le hachage (par exemple, HashMap, HashSet).