为什么“\ 400”不是编译时错误?

时间:2011-07-25 16:37:58

标签: java string unicode unicode-string string-literals

0到255之间的字符值可以用"\000""\377"的八进制文字表示。

那么"\400"不应该是编译时错误吗? Eclipse没有抱怨,但是......这里发生了什么?

2 个答案:

答案 0 :(得分:8)

它将其解释为“\ 40”+“0”

Java语言规范描述了这个here

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

答案 1 :(得分:5)

属于

的构建
\ OctalDigit OctalDigit

...后跟'0'。 属于

\ ZeroToThree OctalDigit OctalDigit

...所以它不含糊或超出范围。有关更多详细信息,请参阅Java语言规范的section 3.10.6

请注意,出于这个原因,您无法将其用作字符文字:

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