Pourquoi 127 est-il le nombre magique pour le comportement du pool constant d'entiers
En Java, le comportement du pool constant pour les valeurs entières diffère lorsque le la valeur dépasse 127. Ce changement de comportement peut être déroutant, en particulier compte tenu du comportement cohérent du pool de constantes de chaîne.
Comportement des valeurs <= 127
Pour les entiers inférieur ou égal à 127, le pool de constantes fonctionne de la même manière que le pool de constantes de chaîne. Deux constantes entières ayant la même valeur sont garanties pour référencer le même objet dans le pool de constantes. Cela signifie que les deux déclarations suivantes renvoient vrai :
Integer i1 = 127; Integer i2 = 127; System.out.println(i1 == i2);
Comportement pour les valeurs > 127
Cependant, lorsque la valeur entière dépasse 127, le comportement change. Dans ce cas, les opérations de boxe (qui convertissent les types primitifs en leurs objets wrapper) n'utilisent plus le pool de constantes. Au lieu de cela, de nouveaux objets Integer sont créés pour chaque valeur. En conséquence, la déclaration suivante renvoie faux :
Integer i1 = 128; Integer i2 = 128; System.out.println(i1 == i2);
Raison du changement
Ce changement de comportement est dû aux détails d'implémentation de la machine virtuelle Java. (JVM). Alors que le JLS exige que certaines valeurs primitives soient toujours encadrées dans des objets indiscernables (par exemple, des entiers compris entre -128 et 127), il appartient à la JVM de déterminer si cette règle est appliquée au-delà de cette plage.
La plupart des JVM choisissez de ne pas appliquer cette règle pour les valeurs supérieures à 127. En effet, cela nécessiterait une surcharge de mémoire supplémentaire et des implications en termes de performances. En créant paresseusement des objets Integer uniquement lorsque cela est nécessaire, la JVM peut optimiser les performances et réduire la consommation de mémoire.
Conclusion
Comprendre les différents comportements du pool constant pour les valeurs entières est essentiel pour écrire du code Java efficace et correct. En sachant que les opérations de boxe utilisent le pool constant pour les valeurs inférieures ou égales à 127, mais pas pour les valeurs plus élevées, les développeurs peuvent éviter des résultats inattendus et optimiser leur code en conséquence.
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!