Ви призначили символьний літерал, який розмежовується одинарними лапками, наприклад '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