VAr*_*VAr 84 java syntax character literals octal
请解释在执行以下代码段时会发生什么:
int a='\15';
System.out.println(a);
这打印出13;
int a='\25';
System.out.println(a);
这打印出21;
int a='\100';
System.out.println(a);
这打印出64.
Boh*_*ian 115
您已经分配了一个字符文字,它由单引号分隔,例如'a'(与字符串文字不同,由双引号分隔,例如"a")到一个int变量.Java执行自动扩展转换,从16位无符号char转换为32位有符号转换int.
但是,当字符文字是反斜杠后跟1-3位数时,它是字符的八进制(基数/基数 8)表示.从而:
\15= 1×8 + 5 = 13(回车;相同'\r')\25 = 2×8 + 5 = 21(NAK字符 - 否定确认)\100= 1×64 + 0×8 + 0 = 64(@符号;相同'@')有关字符文字和转义序列的更多信息,请参阅JLS部分:
从3.10.6 引用BNF:
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
Bah*_*qar 19
符号\nnn表示Java中的八进制字符代码.所以int a = '\15'将八进制字符15的自动转换值指定a为十进制13.