Почему "\ 400" не ошибка времени компиляции? - PullRequest
3 голосов
/ 25 июля 2011

Символьные значения от 0 до 255 могут быть обозначены восьмеричными литералами от "\000" до "\377".

Так не должно ли "\400" быть ошибкой во время компиляции? Затмение не жалуется, однако ... что здесь происходит?

Ответы [ 2 ]

8 голосов
/ 25 июля 2011

Это интерпретируется как "\ 40" + "0"

Спецификация языка Java описывает это здесь .

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
5 голосов
/ 25 июля 2011

Подпадает под строительство

\ OctalDigit OctalDigit

... сопровождаемый '0'. Это не подпадает под

\ ZeroToThree OctalDigit OctalDigit

... так что это не двусмысленно или вне диапазона. См. раздел 3.10.6 Спецификации языка Java для получения более подробной информации.

Обратите внимание, что вы не можете использовать его как символ литерал именно по этой причине:

char x = '\377'; // Fine
char y = '\400'; // Error: unclosed character literal
...