Maison >Java >javaDidacticiel >Pourquoi la comparaison d'objets personnalisés avec `==` et `.equals()` renvoie-t-elle `false` même avec des valeurs de champ identiques ?
Comparaison d'objets avec .equals() et == Operator
Question :
Dans une classe personnalisée avec un champ de chaîne, pourquoi les comparaisons d'objets utilisant à la fois l'opérateur == et la méthode .equals() renvoient-elles false, même lorsque le les valeurs des champs sont identiques ?
Réponse :
L'opérateur == compare les références d'objet, déterminant si les objets comparés sont le même objet en mémoire. D'un autre côté, .equals() compare le contenu des objets.
Dans ce cas, utiliser == renvoie false car object1 et object2 ne sont pas le même objet en mémoire, même s'ils ont le même champ valeur. Pour déterminer si les objets sont égaux en termes de valeurs de champ, .equals() doit être utilisé.
Méthode equals() révisée :
La méthode equals() dans le code fourni peut être révisé pour comparer les valeurs du champ a :
public boolean equals(Object object2) { if (object2 instanceof MyClass) { MyClass otherClass = (MyClass) object2; return this.a.equals(otherClass.a); } return false; }
Supplémentaire Remarque :
Lors du remplacement de equals(), il est généralement recommandé de remplacer également hashCode() pour maintenir le contrat selon lequel les objets égaux ont des codes de hachage égaux.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!