został przypisany charakter dosłowne, który jest ograniczony przez apostrofach, np 'a'
(w odróżnieniu od String dosłownym, która jest ograniczona przez cudzysłów, np "a"
) do zmiennej int
. Java automatycznie rozszerza rzutowanie z 16-bitowego unsigned char
na 32-bitowy podpis int
.
Jednak, gdy literał znaku jest odwróconym ukośnikiem, a następnie trzycyfrowym, jest to reprezentacja znaku w postaci octal (base/radix). Zatem:
\15
= 1 x 8 + 5 = 13 (znak powrotu karetki, taki sam jak '\r'
)
\25
= 2 x 8 + 5 = 21 (NAK znak - negatywne potwierdzenie)
\100
= 1 x 64 + x 8 0 + 0 = 64 (symbol @ takie same znaczenia jak '@'
)
uzyskać więcej informacji na temat literałach znaków i sekwencje, patrz punkty na trasę:
Cytowanie BNF od 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
Wygląda, że interpretuje liczbę jako ósemkową. – Nikhil
'int a = '\ 15'' najpierw tworzy' char' na podstawie liczby ósemkowej "15" (dziesiętnie 13, jako znak char, to ascii "Powrót karetki"), który następnie przekształcasz na 'int' integer . Jest to zgodne z prawdą, ponieważ znaki są 16-bitowymi liczbami całkowitymi, więc jest to bezpieczne uaktualnienie i nie ma informacji o rzutowaniu przez Javę. Pozostałe odpowiedzi obejmują już całą ósemkową/dziesiętną rzecz. –
możliwy duplikat [Dlaczego "\ 117" jest prawidłowym literałem znaków w Javie?] (Http://stackoverflow.com/questions/14950593/why-is-117-a-valid-character-literal-in-java) – gparyani