class A {
    public static void main(String args[]) {
        char c= '\777';
        System.out.println(c);
    }
}


这给出了编译错误(在Java 8编译器上运行)。

转义序列的八进制表示法格式为'\ xxx',但在上述情况下不起作用,char c ='\ 077'有效。

这可能是什么原因?

最佳答案

JLS, Section 3.10.6,“字符和字符串文字的转义序列”,指出八进制char文字最多可以包含3个八进制数字,如果有3个,则第一个数字限制为0-3。


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



最大\377的十进制值为255,因此看起来已经完成,以便该值适合一个(无符号)字节。

07-26 05:57