Le remplacement de la méthode equals() n'aura PAS d'effet sur l'opérateur ==. == est utilisé pour tester si 2 références pointent vers le même objet. La méthode equals() "significativement" compare 2 objets.
Il est important de réaliser ici l'implication du travail "significatif". L'égalité est plus facile à comprendre lorsque vous comparez, par exemple, 2 chaînes ou 2 entiers. C'est pourquoi, la méthode equals() héritée de la classe Object est déjà surchargée par les classes String et Wrapper (Integer, Float, etc.). Cependant, que faire si vous comparez 2 objets de type Song. Ici, l'égalité peut être établie sur la base de
1) Nom de l'artiste
2) Titre de la chanson
3) ou un autre critère
Par conséquent, vous devez remplacer la méthode equals() pour « explicitement » déterminer "quand" 2 objets Song sont considérés égaux. Le "comportement imprévisible" que vous avez mentionné dans votre question se rapporte à des objets comme celui ci-dessus (Song) se comportent lorsqu'il s'agit de collections comme Map. Vous NE DEVRIEZ PAS utiliser ces objets dans une carte tant que vous n'avez pas écrasé la méthode equals() et hashcode(). La raison en est que la recherche et l'indexation de hashmap fonctionnent. Reportez-vous à JavaDoc pour les règles spécifiques. Ce que vous devriez vous rappeler est:
Si 2 objets sont significativement égaux, leur code de hachage devrait renvoyer la même valeur. Cependant, il n'est pas nécessaire que 2 objets soient égaux, s'ils retournent le même code. Encore une fois, Java n'applique aucune règle à ce sujet. Il est de votre responsabilité d'implémenter les méthodes equals() et hashcode() correctement.
s/écrasement/override/p –