Maison >Java >javaDidacticiel >Pourquoi les zéros non significatifs dans les littéraux entiers Java changent-ils leur valeur ?
Interprétation des littéraux entiers avec des zéros non significatifs
Les littéraux entiers avec des zéros non significatifs peuvent se comporter de manière inattendue en Java, présentant une valeur numérique différente de celle de leurs homologues sans zéros non significatifs. Ce comportement découle de l'interprétation des zéros non significatifs comme préfixe de base.
Lorsqu'un littéral numérique est préfixé par un zéro, il est interprété comme un nombre octal (base 8). En effet, en notation octale, les nombres peuvent aller de 0 à 7. Ainsi, "0123" représente le nombre octal 123.
Pour convertir ce nombre octal en son équivalent décimal, chaque chiffre est multiplié par sa puissance correspondante sur 8 et les résultats sont additionnés. Pour "0123", ce calcul est :
(1 * 8 * 8) + (2 * 8) + (3) = 83
Par conséquent, le code "System.out.println(0123)" imprime 83.
En revanche, "123" sans interligne zéro est interprété comme un nombre décimal. Le nombre décimal 123 est simplement la somme de ses chiffres (1 2 3), soit 123. Ainsi, "System.out.println(123)" imprime 123.
Évitez les erreurs d'interprétation
Pour éviter le comportement inattendu des zéros non significatifs dans les littéraux entiers, il est recommandé de toujours commencer nombres décimaux avec un chiffre différent de zéro. Si un littéral est destiné à être exprimé en base 10, il ne doit pas avoir de zéro non significatif.
Notations de base alternatives
Bien que l'octal ne soit plus couramment utilisé, Java fournit un moyen de spécifier des nombres hexadécimaux (base 16) en utilisant le préfixe « 0x ». Par exemple, "0x123" représente le nombre hexadécimal 123, qui équivaut au nombre décimal 291.
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!