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