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

fre*_*low 3 java string unicode unicode-string string-literals

在0和255之间的字符值可以通过从八进制文字来表示"\000""\377".

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

Jef*_*ter 8

它将其解释为"\ 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
Run Code Online (Sandbox Code Playgroud)

  • 就个人而言,我认为如果失败会更好.这是一个非常神秘的区别. (3认同)

Jon*_*eet 5

它属于建设之中

\ OctalDigit OctalDigit
Run Code Online (Sandbox Code Playgroud)

......后跟'0'.它属于

\ ZeroToThree OctalDigit OctalDigit
Run Code Online (Sandbox Code Playgroud)

......所以它不是模棱两可或超出范围.有关更多详细信息,请参阅Java语言规范的第3.10.6节.

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

char x = '\377'; // Fine
char y = '\400'; // Error: unclosed character literal
Run Code Online (Sandbox Code Playgroud)