class A {
public static void main(String args[]) {
char c= '777';
System.out.println(c);
}
}
这给出了编译错误(在Java 8编译器上运行(。
转义序列的八进制表示法的格式为"\xxx",但在上述情况下它不起作用,字符 c='\077' 正在工作。
这是什么原因呢?
JLS 第 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 字节字符值,而八进制777
是十进制511
,即超出 1 字节值的范围。
作为 Java 语言规范 3.10.6。字符和字符串文字的转义序列是这样说的:
八进制转义是为了与 C 兼容而提供的,但只能表示 Unicode 值
u0000
到u00FF
,所以 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
.
进制字符可以从0
到377
(即十六进制:0x00
到0xFF
(。
为了超越这一点,您将需要使用表示基于 Unicode 的十六进制的 uXXXX
表示法。
关于Character
的 Java 文档非常冗长,并且提供了有关此主题的大量信息。
对于您的特定示例,我认为您想执行以下操作:
public class A {
public static void main(String args[]) {
char c= 'u0777';
System.out.println(c);
}
}