请解释一下,究竟是什么,当下面的代码段执行情况:什么是字符文字中转义数字的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.
请解释一下,究竟是什么,当下面的代码段执行情况:什么是字符文字中转义数字的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.
您已分配字符的文本,这是由单引号分隔,例如'a'
(从字符串文字,它是由双引号分隔不同,例如"a"
)到一个int
变量。 Java会自动将范围从16位无符号的char
转换为32位有符号的int
。
但是,如果字符文字是反斜杠后跟1-3个数字,则表示该字符是octal(base/radix8)。因此:
\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
我在3.10.1节中找不到它。它在3.10.4中,字符文字 –
整数文字部分是不相关的。参见[第3.10.4节](http://docs.oracle.com/javase/specs/jls/se7/html/jls-3.html#jls-3.10.4)。另请参见[第3.10.6节](http://docs.oracle。com/javase/specs/jls/se7/html/jls-3.html#jls-3.10.6)用于字符和字符串转义序列。 –
'1-3位数字' - 应该是'0-3'。它的三位数八进制数,八位数仍可以从'0-7'。恩。 '\ 77'仍然有效。 – Jayamohan
的符号\nnn
表示Java中的八进制字符代码。因此int a = '\15'
将十进制字符15的自动转换值赋值为a
,它是十进制的13.
符号'\ nnn'确实不_not_表示Java中的八进制数。在OP的代码中,它表示一个八进制字符转义序列。周围的引号是必不可少的。然后通过赋值将该字符扩展为整数值。 (八进制数字由前导零位数字表示。) –
好点;应该在答案中提到自动投射。更新了答案。 –
将数字放在引号中的事实让我怀疑它将该数字解释为字符文字。后面的数字必须是八进制数。
看起来像是将数字解释为八进制数。 – Nikhil
int a ='\ 15''首先根据八进制数字“15”(十进制13,作为char,它是ascii“回车”)创建一个char,然后重新转换为int整数。由于chars是16位整数,所以这是合法的,所以它是安全的预测,并且Java不会发布有关投射的通知。其他答案已涵盖整个八进制/十进制事物。 –
[为什么'\ 117'是Java中的有效字符文字?](http://stackoverflow.com/questions/14950593/why-is-117-a-valid-character-literal-in-java) – gparyani