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 intvariável. Java faz uma conversão de ampliação automática do não assinado de 16 bits charpara 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