icon - Какова семантика Java экранированного числа в символьном литерале, например '\ 15'?




text java swing (2)

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

Пожалуйста, объясните, что именно происходит, когда выполняются следующие разделы кода:

int a='\15';
System.out.println(a);

это печатает 13;

int a='\25';
System.out.println(a);

это печатает 21;

int a='\100';
System.out.println(a);

это печатает 64.


Обозначение \nnn обозначает восьмеричный код символа в Java. поэтому int a = '\15' присваивает значение автокарта восьмеричного символа 15 равным десятичному значению 13.





octal