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 int
variabile. Java esegue un cast di ampliamento automatico da 16 bit senza segno char
a 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