Accueil
 Sommaire du cours
 1  Introduction à Java
 2  Concepts de bases de Java
 3  Classes et objets en Java
 4  Généralisation spécialisation en Java
 5  Organisation des sources Java
 6  API Java
 6.1  Premières classes de l'API
 6.2  Classe java.lang.Object
 6.2.1  Égalité
 6.2.2  Exemple d'égalité
 6.2.3  Exemple de méthode equals
 6.3  Interface de programmation
 6.4  java.lang.*
 Questions
 6.5  java.util.*
 Questions
 7  Exceptions en Java
 8  Concepts objets avancés en Java
 Bibliographie

 Contacts

W3C validator

Département INF  
 Conception et programmation orientées objet


6.2.3 Exemple de méthode equals
 
1package studsequals; 
public class Personne { 
    private String nom, prenom; 
    public Personne(final String nom, final String prenom){ 
5        this.nom = nom; this.prenom = prenom; 
    } 
    @Override 
    public boolean equals(Object obj) { 
9        if (this == obj) return true; 
        if (obj == null) return false; 
        if (!(obj instanceof Personne))return false; 
        Personne other = (Personne) obj; 
13        if (nom == null) { 
            if (other.nom != null) return false; 
        } else if (!nom.equals(other.nom)) return false; 
        if (prenom == null) { 
17            if (other.prenom != null)  return false; 
        } else if (!prenom.equals(other.prenom)) return false; 
        return true; 
    } 
21}

    précédent     suivant 


Dans cet exemple, nous considérons que deux objets de la classe Personne représentent la même personne si leurs attributs nom et prenom sont deux à deux comparables. Cette comparaison ne tient donc pas compte des autres attributs que nous n’avons pas représenté dans l’exemple.

L’attribut nom des deux objets est comparé à l’aide de la méthode equals de sa classe (à savoir String). Lorsque les noms sont identiques, nous procédons de même pour l’attribut prenom.

La méthode equals a été générée avec eclipse. Il a suffit de lui préciser que les champs à comparer étaient le nom et le prénom.

Le code est stéréotypé. En voici quelques points clés :

  • l’argument reçu par la méthode est de la classe Object. Cela vient du fait que la méthode est héritée et doit être redéfinie. Si nous mettions à la place une référence de la classe Personne, la méthode serait une surcharge.
  • la ligne 15 vérifie si la référence de l’objet passée en argument est égale à la référence de l’objet courant.
  • la ligne 16 vérifie que la référence passée n’est pas nulle.
  • la ligne 17 vérifie que la référence correspond à un objet de la classe courante ou de ses classes dérivées.
  • la ligne 18 fait un « downcast » de l’argument vers une référence correspondant à la classe courante.
  • les lignes suivantes testent l’égalité à l’aide de equals entre les attributs discriminants.

Christian Bac, Denis Conan, Télécom SudParis, CSC 4002, Octobre 2015