字符文本中转义数字的 Java 语义是什么,例如 '\15' ?
请解释执行以下代码部分时究竟会发生什么:
int a='\15';
System.out.println(a);
这打印出13;
int a='\25';
System.out.println(a);
这打印出21;
int a='\100';
System.out.println(a);
这将打印出64。
请解释执行以下代码部分时究竟会发生什么:
int a='\15';
System.out.println(a);
这打印出13;
int a='\25';
System.out.println(a);
这打印出21;
int a='\100';
System.out.println(a);
这将打印出64。
您已经将一个由单引号分隔的字符文本(例如,与由双引号分隔的字符串文本不同,例如)分配给变量。Java 执行从 16 位无符号到 32 位有符号的自动加宽转换。'a'
"a"
int
char
int
但是,当字符文本是后跟 1-3 位数字的反斜杠时,它是字符的八进制(基数/基数 8)表示形式。因此:
\15
= 1×8 + 5 = 13(回车符;与'\r'
)\25
= 2×8 + 5 = 21(NAK 字符 - 负确认)\100
= 1×64 + 0×8 + 0 = 64(@ 符号;与'@'
)有关字符文本和转义序列的更多信息,请参阅 JLS 部分:
引用 BNF 从 3.10.6:
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
该表示法表示 Java 中的八进制字符代码。因此,将八进制字符 15 的自动强制转换值赋给十进制 13。\nnn
int a = '\15'
a