2
votes

Comparaison de la valeur d'un objet avec null

Le littéral null ne peut être affecté qu'à des variables de référence, et généralement, nous utilisons la méthode .equals () pour comparer avec elles

Pourquoi utilisons-nous les opérateurs "égal à" et "non égal à" au lieu de la méthode .equals () s'il s'agit de null?


4 commentaires

Parce que si x est nul, alors x.equals (y) lèvera une exception.


Parce que si cette référence est nulle, alors elle lèverait NullPointerException et c'est la raison pour laquelle vous devez la vérifier avec "==" ou "! ="


pouvez-vous essayer Objects.equals (o1, o2) ?


Objects.equals (x, y) est une méthode d'assistance qui vérifie d'abord la valeur null, puis appelle equals sur l'objet.


3 Réponses :


3
votes

equals est une méthode, ce qui signifie que vous ne pouvez pas l'appeler sur une référence null (bien que vous puissiez appeler myVariable.equals (aVariableThatIsNull) , et il devrait renvoyer false ).

Vous pouvez utiliser java.util.Objects # equals (Object, Object) pour nettoyer votre code et gérer sans problème les vérifications d'égalité de sécurité nulle.


0 commentaires

0
votes

La méthode "equals ()" est une méthode d'instance, et pour appeler une méthode d'instance, vous avez besoin d'une référence d'objet non nulle. Donc, appeler equals () avec une référence nulle entraînera NPE.

Si la méthode est statique, vous pouvez également appeler cette méthode avec une référence nulle car la méthode statique n'est liée à aucune instance.


0 commentaires

1
votes

Il y a trois raisons dans l'ordre d'importance suivant:

  1. Stabilité - La peur de NullPointerException qui se produirait très certainement si vous essayiez d'accéder à la méthode equals () à partir d'un objet qui contient une valeur null . C'est assez évident, mais il fallait tout de même mentionner la raison principale.

  2. Visibilité - Cependant, même si nous pouvions le faire et que cela ne lèverait pas d'exception, cela ne serait pas plus préférable à l'utilisation du == opérateur. Pourquoi? Parce que l'opérateur sépare visuellement les éléments, ce qui rend plus clair ce qui est réellement comparé. Lorsque nous comparons à un null , nous voulons qu'il soit clair et visible dans le code.

  3. Cohérence - La méthode Equals est utilisée pour la comparaison de contenu tandis que l'opérateur == est utilisé pour la comparaison d'adresses < / fort>. Puisque null n'a pas d'adresse parce qu'il n'existe pas, la chose la plus cohérente logiquement serait de comparer d'abord le manque d'adresse avant de passer à la comparaison du contenu réel de deux objets (ce qui est ce que equals () fait).


0 commentaires