Sobes.tech
Junior

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 être true pour tout x non nul.
  • Symétrie : x.equals(y) doit être true si et seulement si y.equals(x) est true pour tout x et y non nuls.
  • Transitivité : Si x.equals(y) et y.equals(z) sont true, alors x.equals(z) doit également être true pour tout x, y, z non nuls.
  • Cohérence : Plusieurs appels à x.equals(y) doivent retourner le même résultat, tant que les objets ne changent pas.
  • Pour tout x non nul, x.equals(null) doit être false.

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).