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 int
zmiennej. Java automatycznie poszerza rzutowanie z 16-bitowego bez znaku char
do 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