无法理解以下Java代码的输出。谁能告诉我它是如何工作的??
int i=5;
System.out.println(i+'+');// Output is 48
System.out.println(i+'-');// Output is 50
System.out.println(i+'*');// Output is 47
System.out.println(i+'%');// Output is 42
System.out.println(i+'/');// Output is 52
你最好的朋友是JLS:
15.18.2。数值类型的加性运算符(+和-)
二进制+运算符对两个操作数进行加法运算数值类型,产生操作数的和。
对操作数进行二进制数字提升(第5.6.2节)。
解释"数字类型的操作数":
4.2。基本类型和值
数字类型包括整型和浮点型。
整型有byte、short、int、long、…和char,其值为16位无符号整数,表示UTF-16代码单元(§3.1)。
和解释"二进制数字提升":
5.6.2。二进制数字进阶
当操作符对一对操作数应用二进制数字提升(每个操作数都必须表示可转换为数字类型的值)时,按顺序应用以下规则:
如果任何操作数是引用类型,它将被拆箱转换(§5.1.8)。
扩展原语转换(§5.1.2)适用于转换或两个操作数,由以下规则指定:
如果其中一个操作数为double类型,则另一个操作数转换为翻倍。
否则,如果其中一个操作数为float类型,则转换另一个操作数浮动。
否则,如果其中一个操作数为long类型,则转换另一个操作数长。
否则,两个操作数都转换为int类型。
(强调我的)
由于int和char都是数值类型,它们经过二进制数值转换,使用UTF-16将char转换为int。
char
数据类型为单个16-bit Unicode
字符。+
的值为43
System.out.println(i+'+'); //prints 48
Java
定义适用于表达式的type promotion rules
。
ASCII - Wikipedia
查看上面的链接以了解更多关于ASCII码的信息。的表达式
(i + ' + ')
的计算结果为(i+43),因为"+"在这里被视为字符,当将其添加到整数i(等于5)时,它被转换为对应的ASCII码(恰好是43)。
不言而喻,5+43 = 48
参见扩展原语转换。