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 ?

Pourquoi la comparaison d'objets personnalisés avec `==` et `.equals()` renvoie-t-elle `false` même avec des valeurs de champ identiques ?

DDD
DDDoriginal
2024-12-25 03:11:09477parcourir

Why Does Comparing Custom Objects with `==` and `.equals()` Return `false` Even with Identical Field Values?

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn