Comportement déroutant des littéraux entiers avec des zéros non significatifs
En Java, les littéraux entiers avec des zéros non significatifs présentent un comportement inattendu, comme l'illustre le code suivant extraits :
System.out.println(0123); // Prints 83 System.out.println(123); // Prints 123
Raison du Différence
La clé pour comprendre cette différence réside dans la représentation octale. Un zéro non significatif dans un littéral entier indique que le littéral est exprimé en base 8 (octal). En octal, chaque chiffre représente une puissance de 8, à partir de 0.
Ainsi, le littéral 0123 peut être converti en décimal comme suit :
(0 * 8³) + (1 * 8²) + (2 * 8) + (3) = 83
En revanche, le littéral 123 est interprété en décimal, où chaque chiffre représente une puissance de 10. Par conséquent, il est évalué à 123.
Litéraux hexadécimaux
En plus de l'octal, Java prend également en charge les littéraux hexadécimaux (base 16) en utilisant le préfixe 0x. Par exemple, 0xFF représente le nombre hexadécimal 255, qui est égal à 11111111 en binaire.
Recommandation
Pour éviter toute confusion, il est conseillé d'omettre les zéros non significatifs des nombres entiers littéraux à moins que la représentation octale ne soit explicitement prévue. Sinon, le littéral sera mal interprété comme octal, conduisant à 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!