La méthode equals() en Java

La méthode equals() en Java détermine si l’objet qui appelle la méthode est égal à l’objet qui est passé en argument. Considérez le programme Java suivant:
 
 

class Point { 
    private double x, y;     
      
    public Point(double x, double y) { 
        this.x = x; 
        this.y = y; 
    } 
} 
  
public class Main { 
    public static void main(String[] args) { 
        Point p1 = new Point(5, 10); 
        Point p2 = new Point(5, 10); 
        if (p1 == p2) { 
            System.out.println("Equal"); 
        } else { 
            System.out.println("Not Equal"); 
        } 
    } 
}

 
Sortie:

Not Equal

Pourquoi il a affiché « Not Equal »? La raison est simple: lorsque nous comparons p1 et p2, il vérifie si p1 et p2 se réfèrent au même objet (les variables d’objet sont toujours des références en Java). p1 et p2 se réfèrent à deux objets différents, donc la valeur (p1 == p2) est false.

Alors, comment vérifions-nous l’égalité des valeurs à l’intérieur des objets? Toutes les classes en Java héritent de la classe Object, directement ou indirectement. La classe Object a quelques méthodes de base comme clone(), toString(), equals(), etc. Nous pouvons remplacer la méthode equals dans notre classe pour vérifier si deux objets ont les mêmes données ou non.
 
 

class Point { 
    private double x, y;     
      
    public Point(double x, double y) { 
        this.x = x;
        this.y = y; 
    }

    // Surcharger equals() pour comparer deux objets
    @Override
    public boolean equals(Object o) {
   
        if (o == this) { 
            return true; 
        } 
  
        if (!(o instanceof Point)) {
            return false; 
        } 
          
        Point p = (Point) o; 
          
        return Double.compare(x, p.x) == 0
                && Double.compare(y, p.y) == 0; 
    }
} 
  
public class Main { 
    public static void main(String[] args) { 
        Point p1 = new Point(5, 10); 
        Point p2 = new Point(5, 10); 
        if (p1 == p2) { 
            System.out.println("Equal"); 
        } else { 
            System.out.println("Not Equal"); 
        } 
    } 
}

 
Sortie:

Equal

Lorsque nous surchargeons la méthode equals(), il est recommandé de surcharger également la méthode hashCode(). Si nous ne le faisons pas, des objets égaux peuvent avoir des valeurs de hachage différentes; et les collections basées sur le hachage, y compris HashMap, HashSet et Hashtable ne fonctionnent pas correctement. Nous en parlerons davantage sur hashCode() dans un tuto séparé.
Comment redéfinir les méthodes equals() et hashCode() en Java

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *