为什么我将10 2030
作为输出?我无法弄清楚它为什么不输出10 50
?
public class Testing1 {
public static void main(String args[]) {
int num1 = 10, num2 = 20, num3 = 30;
System.out.println(num1 + " " + num2 + num3);
答案 0 :(得分:5)
这是因为Java使用'precedence'来计算表达式。在这种情况下,它从左侧开始,并且它向右工作,因为操作都是+
它们都具有相同的优先级,因此使用从左到右的顺序。在第一个“添加”中,添加一个数字和一个字符串。 Java假定'+'用于执行字符串连接,并且您得到结果"10 "
。然后将其添加到20,并获得(字符串连接)结果"10 20". Finally you add the 30, again adding to a String, so you get the result
“10 2030”`。
注意,如果您将操作顺序更改为:
System.out.println(num1+num2+" "+num3);
num1+num2
将被视为数字,并会进行数字加法,得出最终结果:"30 30"
要获得正确的值,您可以通过使用括号(...)
(其运算符优先级高于'+')来创建子表达式来更改评估顺序,并获得结果:
System.out.println(num1 + " " + (num2 + num3));
首先将num2 + num3
评估为数值表达式,然后才将其作为字符串表达式的一部分合并。
答案 1 :(得分:0)
查找运算符优先级以及当不同类型的操作数
时+如何工作答案 2 :(得分:0)
在java'+'中,运算符对不同的操作数的操作方式不同。
java表达式的评估基于优先级规则。在您的情况下,只有“+”运算符,因此评估是从左到右。
对于整数和字符串操作数,java'+'运算符执行字符串连接。
所以num1 +“”+ num2 + num3执行为
(integer + String) + int + int
(String + int)+ int
String + int
您可以通过使用括号强制(num2 + num3)
的优先级来实现您想要的输出。