Maison >Java >javaDidacticiel >Pourquoi le pool de constantes entières de Java se comporte-t-il différemment au-dessus de 127 ?

Pourquoi le pool de constantes entières de Java se comporte-t-il différemment au-dessus de 127 ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-11-10 13:45:03590parcourir

Why Does Java's Integer Constant Pool Behave Differently Above 127?

Question :Divergence dans le comportement du pool constant d'entiers de Java à 127

Introduction :

Le Le pool de constantes entières est un mécanisme en Java qui optimise la mise en cache des valeurs entières communes pour améliorer les performances. Cependant, le comportement de ce pool présente un changement à 127, provoquant une confusion parmi les développeurs.

Comprendre le comportement :

Pour les entiers allant de -128 à 127 , Java garantit des références identiques pour les variables référençant la même constante.

Integer i1 = 127;
Integer i2 = 127;
System.out.println(i1 == i2); // True

En effet, ces valeurs sont mis en cache dans le pool constant.

Divergence à 128 :

Cependant, lorsque la valeur entière dépasse 127, le comportement change.

Integer i1 = 128;
Integer i2 = 128;
System.out.println(i1 == i2); // False

Cela est dû à une optimisation de la mise en œuvre. Bien que JLS garantisse la mise en cache des valeurs jusqu'à 127, au-delà de cette plage, les implémentations peuvent choisir de mettre les valeurs en cache différemment, voire pas du tout.

Considérations supplémentaires :

Même dans la plage garantie (-128 à 127), le comportement de mise en cache n'est pas toujours fiable. Par exemple, utiliser new Integer() peut contourner le pool constant et créer de nouvelles références.

Integer i1 = new Integer(127);
Integer i2 = new Integer(127);
System.out.println(i1 == i2); // False

Conclusion :

Le comportement du pool constant Integer à 127 découle des optimisations de mise en œuvre et de la plage garantie définie par le JLS. Les développeurs doivent être conscients de ce changement de comportement pour éviter des résultats inattendus.

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