Maison > Java > javaDidacticiel > Pourquoi `==` ne parvient-il parfois pas à comparer correctement les objets `Integer` en Java ?

Pourquoi `==` ne parvient-il parfois pas à comparer correctement les objets `Integer` en Java ?

Barbara Streisand
Libérer: 2025-01-02 20:13:39
original
470 Les gens l'ont consulté

Why Does `==` Sometimes Fail to Compare `Integer` Objects Correctly in Java?

Le mystère de l'égalité entière en Java

À mesure que Java introduisait l'autoboxing dans la version 1.5, l'utilisation d'objets entiers est devenue interchangeable avec les entiers primitifs. Cependant, il a été observé que l'utilisation de == pour comparer des objets Integer peut conduire à des résultats inattendus.

Dans une situation déroutante, le code utilisant == pour comparer des variables Integer s'est avéré définir incorrectement un indicateur booléen comme vrai. alors que les valeurs étaient en fait égales. Cependant, le passage de la comparaison à !cdiCt.equals(cdsCt) a résolu le problème.

Ce comportement inhabituel provient du mécanisme de mise en cache de la JVM pour les valeurs entières. Pour les valeurs comprises entre -128 et 127, la JVM réutilise les instances mises en cache, garantissant ainsi une utilisation efficace de la mémoire. Par conséquent, les entiers de cette plage apparaissent identiques quelles que soient leurs références réelles.

Lors de l'utilisation de == pour comparer des objets Integer, l'égalité des références est vérifiée plutôt que le contenu. Par conséquent, si les instances mises en cache sont utilisées, la comparaison renvoie vrai même lorsque les références d'objet sont distinctes.

Ce problème ne se produit pas lors de l'utilisation de la méthode equals() car elle compare les valeurs des objets, sans tenir compte des références. Par conséquent, il est recommandé d'utiliser equals() pour comparer des objets Integer, en particulier lorsque la plage de valeurs peut s'étendre au-delà de la plage mise en cache ou lorsqu'une détermination précise de l'égalité est requise.

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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal