Vous avez assigné un littéral de caractère, qui est délimité par des guillemets simples, par exemple 'a'
(comme distinct d'un littéral de chaîne, qui est délimité par des guillemets doubles, par exemple "a"
) à une int
variable. Java effectue un élargissement automatique de la conversion du 16 bits non signé char
au 32 bits signé int
.
Cependant, lorsqu'un littéral de caractère est une barre oblique inverse suivie de 1 à 3 chiffres, il s'agit d'une représentation octale ( base / base 8) du caractère. Donc:
\15
= 1 × 8 + 5 = 13 (un retour chariot; identique à '\r'
)
\25
= 2 × 8 + 5 = 21 (un caractère NAK - accusé de réception négatif)
\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, consultez les sections JLS:
Citant le BNF du 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