la méthode toString. Les résultats obtenus vous semblent-ils cohérents ? Pourquoi ?
3 Redéfinition de la méthode equals
Comme nous l’avons évoqué précédemment, la méthode equals par défaut compare
uniquement l’adresse en mémoire des différentes instances : on parle de
comparaison superficielle des instances (shallow comparison en anglais). Il s’agit
d’une relation d’égalité a minima dans la mesure où l’API ne dispose pas de plus amples
informations sur l’objet que vous souhaitez concevoir : deux variables partageant le
même espace mémoire sont identiques par défaut mais, à l’inverse, deux objets avec les
mêmes attributs peuvent avoir des espaces mémoires différents.
Une comparaison profonde (deep comparison en anglais) considère en revanche
les valeurs de chacun des attributs. Suivant l’application ou le modèle de données
choisi, il ne sera pas nécessaire de comparer la totalité des attributs des instances deux
à deux : c’est dans ce genre de situation que la méthode equals prend tout son sens !
Bonnes pratiques : redéfinition de boolean equals(Object obj)
Nous vous présentons ici les principales étapes à réaliser lorsque l’on redéfinit la méthode
equals. Les éléments présentés sont une synthèse rapide du très bon tutoriel accessible
au lien suivant : http://technofundo.com/tech/java/equalhash.html. Pour de plus
amples détails merci de vous référez à cette page.
1. Test de réflexivité : On vérifie tout d’abord que l’Object comparé ne corres-
pond pas à la même adresse mémoire que l’objet courant (this), auquel cas on
retourne immédiatement true ;
2. Test du type : On vérifie ensuite que l’objet comparé est bien initialisé (différent
de null) et appartient à la même classe que l’objet courant (.getClass()). Le
cas échéant, il suffit de renvoyer false ;
3. Test des attributs : Une fois la nature de la classe vérifiée, on peut convertir
l’Object fournit en paramètre dans son véritable type (cast avec la notation
(MaClasse)). On compare enfin les attributs que l’on souhaite contrôler. On
fera néanmoins attention aux deux points suivants pour comparer les attributs
qui ne sont pas des types primitifs :
•vérifier qu’ils soient bien initialisés avant de les comparer ;
•toujours utiliser la méthode equals pour les comparer !
NB : Lorsque l’on redéfinit la méthode equals, il est en général impératif de redéfinir la méthode
hashCode comme nous le verrons par la suite.
Redéfinissez à présent la méthode equals pour la classe Etudiant. Nous considérerons
ici que deux étudiants sont identiques dès lors qu’ils disposent des attributs nom,prenom
et naissance identiques.
4