class A {
public static void main(String args[]) {
char c= '\777';
System.out.println(c);
}
}
这给出了编译错误(在Java 8编译器上运行)。
转义序列的八进制表示法的格式为' \ xxx'但在上述情况下它不起作用,char c =' \ 077'正在努力。
这可能是什么原因?
答案 0 :(得分:2)
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,所以看起来这样做是为了使值适合一个(无符号)字节。
答案 1 :(得分:2)
因为八进制转义序列只能指定1字节字符值,而八进制777
是十进制511
,即超出1字节值的范围。
正如Java语言规范3.10.6. Escape Sequences for Character and String Literals所说:
提供了与C 的兼容性的八进制转义,但只能表示
\u0000
到\u00FF
的Unicode值,因此通常首选 Unicode转义
八进制转义的完整规范是:
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
。
答案 2 :(得分:1)
八位字符可以从0
到377
(以十六进制:0x00
到0xFF
)。
为了超越这个范围,您需要使用代表基于Unicode的十六进制的\uXXXX
表示法。
关于Character
的Java文档非常lengthy,并提供了有关此主题的大量信息。
对于您的特定示例,我认为您想要执行以下操作:
public class A {
public static void main(String args[]) {
char c= '\u0777';
System.out.println(c);
}
}