Przypisałeś literał znakowy, który jest oddzielony pojedynczymi cudzysłowami, np. 'a'(W odróżnieniu od literału String, który jest oddzielony podwójnymi cudzysłowami, np. "a") Do intzmiennej. Java automatycznie poszerza rzutowanie z 16-bitowego bez znaku chardo 32-bitowego ze znakiem int.
Jednak gdy literał znakowy jest odwrotnym ukośnikiem, po którym następują 1-3 cyfry, jest to ósemkowa ( podstawa / podstawa 8) reprezentacja znaku. A zatem:
\15= 1 × 8 + 5 = 13 (powrót karetki; tak samo jak '\r')
\25 = 2 × 8 + 5 = 21 (znak NAK - negatywne potwierdzenie)
\100= 1 × 64 + 0 × 8 + 0 = 64 (symbol @; to samo co '@')
Aby uzyskać więcej informacji na temat literałów znaków i sekwencji ucieczki, zobacz sekcje JLS:
Cytując BNF z 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