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 deux objets pour l'égalité. Par défaut, dans le cas d'objets héritant de Object sans la redéfinir, elle compare les références des objets (==), c'est-à-dire vérifie si les variables pointent vers la même zone mémoire.
Redéfinir correctement la méthode equals() est important pour comparer les objets par leur contenu, et non par leur emplacement en mémoire.
Lors de la redéfinition de equals(), il faut suivre les règles suivantes :
- Réflexivité : pour tout objet non nul
x,x.equals(x)doit retournertrue. - Symétrie : pour tous objets non nuls
xety, six.equals(y)retournetrue, alorsy.equals(x)doit aussi retournertrue. - Transitivité : pour tous objets non nuls
x,yetz, six.equals(y)retournetrueety.equals(z)retournetrue, alorsx.equals(z)doit aussi retournertrue. - Cohérence : pour tous objets non nuls
xety, plusieurs appels àx.equals(y)doivent retourner de façon cohérente le même résultat, tant que l'information utilisée pour la comparaison ne change pas. - Pour tout objet non nul
x,x.equals(null)doit retournerfalse.
En général, lors de la redéfinition de equals(), il faut aussi redéfinir la méthode hashCode(), en respectant le contrat : si deux objets sont égaux selon equals(), leurs codes de hachage, retournés par hashCode(), doivent être identiques. La réciprocité n'est pas obligatoire : si les codes de hachage sont identiques, les objets ne sont pas nécessairement égaux.
Exemple de redéfinition :
public class MyObject {
private int value;
private String name;
public MyObject(int value, String name) {
this.value = value;
this.name = name;
}
@Override
public boolean equals(Object o) {
// Comparaison elle-même
if (this == o) return true;
// Vérification de null et du type d'objet
if (o == null || getClass() != o.getClass()) return false;
// Conversion de type et comparaison par champs
MyObject myObject = (MyObject) o;
return value == myObject.value &&
Objects.equals(name, myObject.name);
}
@Override
public int hashCode() {
// Génération du code de hachage basé sur les champs
return Objects.hash(value, name);
}
// getters, setters, etc.
}