1 réponse
Non, ce sont deux choses indépendantes, il est possible d'avoir deux objets avec le même hashCode et qui ne soient pas égaux (c'est même très courant), mais il est également possible d'avoir deux objets égaux qui ont des hashCode différents (mais c'est déconseillé)
Cependant, pour la plupart des traitements, une cohérence entre ces valeurs permet d'optimiser les traitements. En effet si on impose que deux objets égaux aient le même hashCode, alors il est possible d'utiliser le hashCode comme premier test d'égalité (c'est en général un calcul simple), et ne faire la comparaison complète des deux objets (plus coûteuse) que lorsque les hashCode sont identiques.
Il est donc en général intéressant de redéfinir le hashCode avec ces deux propriétés :
1) le hashCode est facile à obtenir (par le calcul, ou précalculé à l'initialisation)
2) deux objets égaux ont le même hashCodeLa confiance n'exclut pas le contrôle
Cependant, pour la plupart des traitements, une cohérence entre ces valeurs permet d'optimiser les traitements. En effet si on impose que deux objets égaux aient le même hashCode, alors il est possible d'utiliser le hashCode comme premier test d'égalité (c'est en général un calcul simple), et ne faire la comparaison complète des deux objets (plus coûteuse) que lorsque les hashCode sont identiques.
Il est donc en général intéressant de redéfinir le hashCode avec ces deux propriétés :
1) le hashCode est facile à obtenir (par le calcul, ou précalculé à l'initialisation)
2) deux objets égaux ont le même hashCodeLa confiance n'exclut pas le contrôle
deux objets egaux ils ont forcement le meme hashcode
Donc si tu ne fais pas toi même de surcharge de hashCode, celui-ci correspondra à une égalité au sens strict, ce qui peux être suffisant dans certains cas.
Par contre l'égalité avec la méthode equals correspond à dire x.equals(y), dans ce cas ce sont peut-être deux objets différents, mais c'est leur valeur qui est égale. Dans ce cas il est conseillé d'adapter la méthode hashCode pour que l'égalité du hashCode coïncide avec l'égalité sur la valeur, mais le comportement par défaut sur l'égalité physique reste valable dans quelques cas.