Hai assegnato un carattere letterale, che è delimitato da virgolette singole, ad esempio 'a'(come distinto da un valore letterale String, che è delimitato da virgolette doppie, ad esempio "a") a una intvariabile. Java esegue un cast di ampliamento automatico da 16 bit senza segno chara 32 bit con segno int.
Tuttavia, quando un carattere letterale è una barra rovesciata seguita da 1-3 cifre, è una rappresentazione ottale ( base / radice 8) del carattere. Quindi:
\15= 1 × 8 + 5 = 13 (un ritorno a capo; uguale a '\r')
\25 = 2 × 8 + 5 = 21 (un carattere NAK - riconoscimento negativo)
\100= 1 × 64 + 0 × 8 + 0 = 64 (il simbolo @; uguale a '@')
Per ulteriori informazioni sui letterali dei caratteri e sulle sequenze di escape, vedere le sezioni JLS:
Citando il BNF da 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