Você atribuiu um literal de caractere, que é delimitado por aspas simples, por exemplo 'a'
(diferente de um literal String, que é delimitado por aspas duplas, por exemplo "a"
) a uma int
variável. Java faz uma conversão de ampliação automática do não assinado de 16 bits char
para o assinado de 32 bits int
.
No entanto, quando um literal de caractere é uma barra invertida seguida por 1-3 dígitos, é uma representação octal ( base / raiz 8) do caractere. Portanto:
\15
= 1 × 8 + 5 = 13 (um retorno de carro; o mesmo que '\r'
)
\25
= 2 × 8 + 5 = 21 (um caractere NAK - confirmação negativa)
\100
= 1 × 64 + 0 × 8 + 0 = 64 (o símbolo @; o mesmo que '@'
)
Para obter mais informações sobre literais de caracteres e sequências de escape, consulte as seções JLS:
Citando o BNF 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