【问题标题】:Why isn't "\400" a compile-time error?为什么“\400”不是编译时错误?
【发布时间】:2011-07-25 16:37:58
【问题描述】:

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

那么"\400" 不应该是编译时错误吗? Eclipse 并没有抱怨,但是……这是怎么回事?

【问题讨论】:

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


    【解决方案1】:

    将其解释为 "\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
    

    【讨论】:

    • 个人觉得如果失败了会更好。这是一个非常神秘的区别。
    【解决方案2】:

    它属于

    \ OctalDigit OctalDigit
    

    ... 后跟“0”。它属于

    \ ZeroToThree OctalDigit OctalDigit
    

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

    请注意,您不能将其用作 character 文字,原因正是如此:

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

    【讨论】:

    • 如果“未闭合字符文字”错误消息来自官方 javac,它会很适合奇怪的错误消息列表。
    • @Thorbjørn:我不认为这很奇怪。它也不限于这种情况:'abc' 也会这样做。
    猜你喜欢
    • 2014-06-27
    • 1970-01-01
    • 1970-01-01
    • 2014-08-25
    • 2013-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多