Java:将int添加到int到int - 奇怪的行为

use*_*626 0 java

我注意到这样的事情:

String s = 1 + 2 + " whatsgoingon " + 3 + 4 + 5;
System.out.println(s);
Run Code Online (Sandbox Code Playgroud)

返回: 3 whatsgoingon 345

有人可以解释这种行为吗?为什么前两个数字加在一起然后转换为字符串,但最后三个数字转换为字符串然后连接.

WoD*_*oSc 8

因为在表达式中:

1 + 2 + " whatsgoingon " + 3 + 4 + 5
Run Code Online (Sandbox Code Playgroud)

从左到右评估为

(((((1 + 2) + " whatsgoingon ") + 3) + 4) + 5)
Run Code Online (Sandbox Code Playgroud)

所以第一个'+'运算符被视为算术运算符,因为在那一刻还没有涉及到任何字符串,在连接字符串之后,'+'运算符被视为字符串连接操作,因此数字被类型化为字符串.

如果要在算术上也添加最后三个整数,请将它们放在括号中:

1 + 2 + " whatsgoingon " + (3 + 4 + 5)
Run Code Online (Sandbox Code Playgroud)