Pourquoi avons-nous besoin de surcharger la méthode equals() en Java?
J'ai une certaine confusion à propos de la raison pour laquelle nous remplacer la .equals
méthode.
Par exemple:
Test test1 = new Test(3);
Test test2 = new Test(3);
//The if comparison does the same thing that the overridden `.equals()` method does.
if(test1.equals(test2)){
System.out.println("test1 and test2 are true in .equals()");
}
//Override .equals method.
public boolean equals(Object object) {
if(object instanceof Test && ((Test)object).getValue() == this.t) {
return true;
} else {
return false;
}
}
Je ne comprends pas pourquoi nous devons remplacer la .equals()
méthode.
test1.equals(test2)
ne fonctionne pas comme prévu si vous n'avez pas le remplacer.Remarque: vous devez remplacer
hashCode()
si vous écrasez equals()
OriginalL'auteur nakul | 2013-03-02
Vous devez vous connecter pour publier un commentaire.
De l'article Remplacer equals et hashCode en Java:
OriginalL'auteur Grijesh Chauhan
Cela devrait être suffisant pour répondre à votre question:
http://docs.oracle.com/javase/tutorial/java/IandI/objectclass.html
(Partielle devis - cliquez à travers pour lire des exemples).
==
si nous ne trouvons pas la nécessité deoverride
equals()
méthode. Suis-je la corriger ?OriginalL'auteur Byron
.equals() n'est pas intelligent de comparaison pour la plupart des classes, à moins que la classe la remplace. Si il n'est pas défini pour un utilisateur (utilisateur) de la classe, il a le même comportement que ==.
Référence:
http://www.leepoint.net/notes-java/data/expressions/22compareobjects.htmlhttp://www.leepoint.net/data/expressions/22compareobjects.htmlOriginalL'auteur sabergeek
Le comportement par défaut de java.lang.L'objet est de comparer les références, mais ce n'est pas approprié pour chaque type d'objet. Il y a des choses que l'on appelle Des Objets De Valeur (comme BigDecimal ou Chaîne), où les objets avec la même valeur sont considérés comme interchangeables, de sorte que le comportement par défaut d'égal à égal n'est pas souhaitable. Ces sortes d'objets ont pour implémenter equals et hashcode basé sur la valeur que l'objet prend sur.
OriginalL'auteur Nathan Hughes
Pour répondre à votre question, tout d'abord, je vous recommande fortement de regarder le La Documentation.
Sans substitution de la méthode equals (), il va agir comme "==". Lorsque vous utilisez le "==" opérateur sur les objets, il vérifie simplement si ces pointeurs font référence au même objet. Pas si leurs membres contiennent la même valeur.
Nous remplacer pour garder notre code propre et résumé de la logique de comparaison de l'instruction Si, dans l'objet. Ceci est considéré comme une bonne pratique et prend avantage de Java est fortement Approche Orientée Objet.
OriginalL'auteur christopher
Laissez-moi vous donner un exemple que je trouve très utile.
Vous pouvez penser de référence comme le numéro de page d'un livre.
Supposons maintenant que vous disposez de deux pages a et b comme ci-dessous.
Dans ce cas, a == b vous donnera des faux. Mais, pourquoi? La raison en est que ce == est en train de faire, c'est comme comparer le numéro de page. Donc, même si le contenu de ces deux pages est exactement le même, vous aurez toujours faux.
Mais que faisons-nous si vous nous voulons comparer le contenu?
La réponse est d'écrire votre propre méthode equals et de spécifier ce que vous voulez vraiment comparer.
OriginalL'auteur user1559897
Par défaut .equals() utilise == identité de fonction pour comparer ce qui évidemment ne fonctionne pas comme les instances test1 et test2 ne sont pas les mêmes. == fonctionne uniquement avec les types de données primitifs, comme int ou string. Si vous avez besoin de le remplacer pour le faire fonctionner en comparant toutes les variables membres de la classe de Test
OriginalL'auteur Basanta
Objet.méthode equals() ne vérifie que la référence d'objet n'est pas primitive ou de type de données valeur de l'Objet (classe Wrapper objet de données primitif, simple type de données primitif (byte, short, int, long, etc.)). De sorte que nous devons remplacer méthode equals() lorsque l'on compare objet en fonction du type de données primitif.
OriginalL'auteur App Kart