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!