Java Println如何计算特殊符号和算术运算



无法理解以下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。二进制数字进阶

当操作符对一对操作数应用二进制数字提升(每个操作数都必须表示可转换为数字类型的值)时,按顺序应用以下规则:

  1. 如果任何操作数是引用类型,它将被拆箱转换(§5.1.8)。

  2. 扩展原语转换(§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

首先,所有byteshortchar值都提升为int。然后,如果其中一个操作数是long,则整个表达式提升为long

ASCII - Wikipedia


查看上面的链接以了解更多关于ASCII码的信息。

的表达式

(i + ' + ')

的计算结果为(i+43),因为"+"在这里被视为字符,当将其添加到整数i(等于5)时,它被转换为对应的ASCII码(恰好是43)。

不言而喻,5+43 = 48



参见扩展原语转换。

最新更新