System.out.println的输出给出了奇怪的数字

时间:2014-03-24 20:32:50

标签: java

System.out.println("1 + 2 = " + 1 + 2);

输出:12

你能解释一下这是为什么吗?我试图查看一些文档,但没有找到任何东西......

5 个答案:

答案 0 :(得分:2)

由于+运算符从左到右工作,它首先将字符串"1 + 2 = "添加到1,然后获取"1 + 2 = 1",然后将2添加到"1 + 2 = 12"得到System.out.println(("1 + 2 = " + 1) + 2);

它相当于

System.out.println("1 + 2 = " + (1 + 2));

试试这个。

{{1}}

答案 1 :(得分:1)

由于左侧操作数是String,因此左侧操作数会被强制转换为String

首先评估

"1 + 2 = " + 1。结果是字符串"1 + 2 = 1"。然后下一个操作是"1 + 2 = 1" + 2。该操作的结果是"1 + 2 = 12"

答案 2 :(得分:0)

运营商+始终从左到右分组。所以你得到"1 + 2 = " + 1,(得到"1 + 2 = 1"),然后最后添加2,给出"1 + 2 = 12"

如果您希望它从右向左分组,则需要使用括号,例如"1 + 2 = " + (1 + 2),这样会"1 + 2 = 3"

答案 3 :(得分:0)

这是因为优先权。如果您仅使用+,则从左到右。首先,创建字符串1 + 2 =,然后在字符串中添加数字,生成字符串1 + 2 = 1,然后将下一个int添加到字符串中,生成字符串1 + 2 = 12

您可以使用括号"1 + 2 = " + (1 + 2)

来避免这种情况

答案 4 :(得分:0)

根据Java Specification §15.7

  

Java编程语言保证运算符的操作数似乎以特定的评估顺序进行评估,即从左到右。

§15.18

  

加法运算符具有相同的优先级,并且在语法上是左关联的(它们从左到右分组)。

     

如果+运算符的任一操作数的类型是String,则该操作是字符串连接。

所以上半部分"1 + 2 = " + 1是第一个得到评估的部分。因为的前半部分是一个字符串,所以它的计算结果为:"1 + 2 = 1"。整个表达式现在是"1 + 2 = 1" + 2。再次,此表达式中的两个操作数之一是String,因此+操作数连接。然后整个表达式计算为字符串"1 + 2 = 12",然后打印出来。