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
Libérer: 2024-12-25 03:11:09
original
476 Les gens l'ont consulté

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;
}
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal