请说明执行以下代码部分时究竟发生了什么:
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。
int a='\15'
首先创建一个char
基于八进制数字“ 15”(十进制13,作为一个字符,它是ascii“回车”),然后将其重铸为int
整数。这是合法的,因为char是16位整数,因此这是安全的方法,Java不会发布有关强制转换的通知。其他答案已经涵盖了整个八进制/十进制的内容。
Answers:
您已为字符变量分配了一个变量'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
1-3 digits
-应该是0-3
。而对于3位八进制,两位八进制仍可以从0-7
。例如 '\ 77'仍然有效。