Maison >Java >javaDidacticiel >Pourquoi l'égalité « entier » renvoie-t-elle parfois « false » en Java ?

Pourquoi l'égalité « entier » renvoie-t-elle parfois « false » en Java ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-11-30 03:08:13302parcourir

Why Does `Integer` Equality Sometimes Return `false` in Java?

Mise en cache des entiers en Java : comprendre l'optimisation

Des observations récentes ont semé la confusion concernant le comportement des objets Integer en Java. Un exemple de code démontre que l'opérateur d'égalité renvoie « faux » pour deux instances d'entier égales à 1 000 mais « vrai » pour deux instances égales à 100.

Ce paradoxe apparent découle du mécanisme de mise en cache de Java pour les entiers. Pour optimiser les performances et réduire l'empreinte mémoire, la machine virtuelle Java (JVM) met en cache les objets Integer pour les valeurs comprises entre -128 et 127. Cela signifie que les références aux instances Integer dans cette plage sont toujours les mêmes.

Par conséquent, dans le deuxième extrait de code, où les instances Integer représentent la valeur 100, "c" et "d" pointent tous deux vers le même objet mis en cache, ce qui donne "true" lors de la comparaison de leur égalité. Cependant, pour les valeurs en dehors de cette plage, telles que 1 000, différents objets Integer sont créés, d'où le « faux » résultat de comparaison.

Cette optimisation affecte les performances en réduisant l'utilisation de la mémoire, conduisant à une utilisation plus efficace du cache. Il élimine également la surcharge liée à la création de nouveaux objets pour les entiers fréquemment utilisés, ce qui accélère l'exécution du code.

Des recherches plus approfondies sur ce sujet peuvent être trouvées dans les ressources suivantes :

  • [Java d'Oracle Optimisation des performances Lignes directrices](https://docs.oracle.com/javase/7/docs/technotes/guides/vm/performance-tuning-6.html#integer_caching)
  • [Optimisation de l'arithmétique entière en Java et C ](https://coincidental.com/research/number-boxes.pdf)

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