Ответ 1
Вы назначили литерал символа, который делится одинарными кавычками, например 'a'
(в отличие от строкового литерала, который делится двойными кавычками, например "a"
), на переменную int
. Java делает автоматическое расширение от 16-битного без знака char
до 32-разрядной подписанной int
.
Однако, когда символьный литерал является обратным слэшем, за которым следуют 1-3 цифры, это octal (base/radix 8) представление персонажа. Таким образом:
-
\15
= 1 × 8 + 5 = 13 (возврат каретки, такой же, как'\r'
) -
\25
= 2 × 8 + 5 = 21 (NAK char - отрицательное подтверждение) -
\100
= 1 × 64 + 0 × 8 + 0 = 64 (символ @, такой же, как'@'
)
Для получения дополнительной информации о символьных литералах и escape-последовательностях см. разделы JLS:
Цитата BNF из 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