Les objets wrapper de Java fournissent un pont crucial entre les types de données primitifs et les objets. Cependant, un comportement particulier a été observé dans le boxing des valeurs entières : les instances semblent être partagées uniquement dans la plage de -128 à 127.
Considérez le code suivant :
Integer integer1 = 127; Integer integer2 = 127; System.out.println(integer1 == integer2); // outputs "true"
Dans ce cas, entier1 et entier2 se voient attribuer la même instance, comme en témoigne la sortie « vrai » lors de leur comparaison avec ==. Cependant, un comportement différent apparaît lorsque les valeurs dépassent cette plage :
Integer integer1 = 128; Integer integer2 = 128; System.out.println(integer1 == integer2); // outputs "false"
Pourquoi ce phénomène se produit-il ?
Selon la spécification du langage Java (JLS), il est spécifiquement indiqué que "Certaines valeurs communes sont toujours enfermées dans des objets indiscernables." Cette plage est définie comme "un octet, ou un caractère compris entre u0000 et u007f, ou un nombre entier ou court compris entre -128 et 127 (inclus)".
La justification de ce comportement, comme expliqué dans le JLS, est de « garantir que dans les cas les plus courants, le comportement sera celui souhaité, sans imposer une pénalité indue en termes de performances, en particulier sur les petits appareils ». En limitant le comportement de l'instance partagée à une plage de valeurs commune, Java établit un équilibre entre les performances et le comportement attendu.
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!