Ви призначили символьний літерал, який розмежовується одинарними лапками, наприклад '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 (символ @; такий самий, як '@'
)
Для отримання додаткової інформації про символьні літерали та екранні послідовності див. Розділи 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