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