题目
1 2 3 4 5 6 7 8 | public class Test { public static void main(final String[] args) { final int a = 10; final int b = 20; System.out.println(a ' ' b '=' (a b)); } } |
---|
乍一看,可能有的同学会觉得很简单,直接给出如下答案:
1 | 10 20=30 |
---|
其实这是道陷进题,很容易就看混了,正确的答案是:
1 | 164 |
---|
分析
为什么答案会是164
?
这是因为这里并不是字符串拼接,而是整型与字符类型的加法运算。
用一对单引号'
包括起来的是字符,用一对双引号"
包括起来的是字符串。
对于字符串来说,用
拼接起来的结果还是字符串。但这道题中,用
拼接起来的是整型和字符类型,就变成了单纯的加法运算。在加法运算中,数据类型会从低位自动转换成高位,因为高位转低位会有数据溢出导致丢失精度的风险。
当整型与字符类型相加时,字符类型会转换成整型,也就是转换成对应的ASCII码值。于是乎,a ' ' b '=' (a b)
就变成了10 43 20 61 (10 20)
,其运算结果就是164
。
题目变形
其一
1 2 3 4 5 6 7 8 | public class Test { public static void main(final String[] args) { final int a = 10; final int b = 20; System.out.println(a " " b "=" (a b)); } } |
---|
这道题的答案就是10 20=30
了。
其二
1 2 3 4 5 6 7 | public class Test { public static void main(final String[] args) { System.out.println('A'); System.out.println((int)'A'); } } |
---|
这道题的答案是:
1 2 | A 65 |
---|
如果我们想知道某个字符对应的ASCII码是多少,可以将其转换成整型,这个值就是其ASCII码值。
警告
本文最后更新于 May 11, 2019,文中内容可能已过时,请谨慎使用。