84 votes

Quelle est la sémantique Java d'un nombre échappé dans un littéral de caractère, par exemple ' '. \15 ' ?

Veuillez expliquer ce qui se passe exactement lorsque les sections de code suivantes sont exécutées :

int a='\15';
System.out.println(a);

cela donne 13 ;

int a='\25';
System.out.println(a);

cela donne 21 ;

int a='\100';
System.out.println(a);

cela donne 64.

115voto

Bohemian Points 134107

Vous avez assigné un caractère littéral, qui est délimité par des guillemets simples, par exemple 'a' (à la différence d'une chaîne littérale, qui est délimitée par des guillemets doubles, par ex. "a" ) à un int variable. Java effectue un élargissement automatique à partir de la variable non signée de 16 bits. char au format 32 bits signé int .

Toutefois, lorsqu'un caractère littéral est une barre oblique inversée suivie de 1 à 3 chiffres, il s'agit d'un caractère de type octal ( base/radix 8) représentation du personnage. Ainsi :

  • \15 = 1×8 + 5 = 13 (un retour chariot ; identique à '\r' )
  • \25 = 2×8 + 5 = 21 (un NAK char - negative acknowledgement)
  • \100 = 1×64 + 0×8 + 0 = 64 (le symbole @ ; identique à '@' )

Pour plus d'informations sur les littéraux de caractères et les séquences d'échappement, voir les sections JLS :

En citant le BNF à partir de 3.10.6 :

OctalEscape:
    \ OctalDigit
    \ OctalDigit OctalDigit
    \ ZeroToThree OctalDigit OctalDigit

OctalDigit: one of
    0 1 2 3 4 5 6 7

ZeroToThree: one of
    0 1 2 3

19voto

Bahman M. Points 681

La notation \nnn désigne un code de caractère octal en Java. donc int a = '\15' attribue la valeur auto-cast'ed du caractère octal 15 à a qui est la valeur décimale 13.

6voto

Nikhil Points 1373

Le fait que vous ayez mis les chiffres entre guillemets me fait penser qu'il interprète le nombre comme un caractère littéral. Les chiffres qui suivent doivent être en octal.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X