Pourquoi le comportement du pool de constantes entières diffère après 127
Le pool de constantes pour les nombres en Java diffère de celui des chaînes. Alors que seules les constantes de compilation sont internées pour les chaînes, toute opération de boxe implique le pool pour les types wrapper d'entiers.
Par exemple :
int x = 10; int y = x + 1; Integer z = y; // Not a compile-time constant Integer constant = 11; System.out.println(z == constant); // true
Le JLS garantit une petite plage de valeurs regroupées. , les implémentations ayant la possibilité d'utiliser une plage plus large.
En pratique, la plupart des implémentations utilisent Integer.valueOf pour les opérations de boxe, ce qui conduit au comportement suivant :
Integer x = Integer.valueOf(100); Integer y = Integer.valueOf(100); System.out.println(x == y); // true
Selon la section JLS 5.1.7 :
Les valeurs comprises entre -128 et 127 produiront toujours des références identiques lorsqu'elles seront encadrées. Il s'agit d'un compromis pratique qui garantit que les valeurs communes sont toujours indiscernables.
Cependant, le comportement change pour les valeurs en dehors de cette plage. Pour des raisons d'efficacité, les implémentations peuvent ne pas supposer de références partagées pour ces valeurs.
Cela garantit le comportement souhaité dans la plupart des situations sans impact significatif sur les performances. Les implémentations à mémoire limitée peuvent étendre la mise en cache pour couvrir une plage de valeurs plus large.
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!