为什么在这些情况下输出会有所不同?
int x=20,y=10;
System.out.println("printing: " + x + y);
==> 打印:2010
System.out.println("printing: " + x * y);
==> 打印:200
为什么不是第一个输出30?它与运算符优先级有关吗?像第一次“打印”和x连接,然后这个结果字符串和y连接?我是对的吗?
答案 0 :(得分:20)
其BODMAS
规则
我在下面从高到低显示优先顺序:
B - Bracket
O - Power
DM - Division and Multiplication
AS - Addition and Substraction
如果运算符具有相同的优先级,则可以从 Left to Right
开始
现在
System.out.println("printing: " + x + y);
"printing: "
:是字符串“
"+"
:是Java中唯一一个将Number连接到String的重载运算符。
由于我们在这里有2个“+”运算符,并且x + y在"printing:" +
已经发生之后,它将x和y视为字符串。
因此输出 2010。
System.out.println("printing: " + x * y);
这里
"*"
:优先级高于+
因此x*y
首先然后printing: +
因此输出 200
如果您想在第一种情况下输出200,请执行此操作:
System.out.println("printing: "+ (x+y));
Bracket
的优先顺序更高到Addition
。
答案 1 :(得分:8)
基础数学告诉您每次都要添加数字。
首先计算"printing: " + x
。因为它是string + int
,结果是"printing: 20"
。然后,您添加y
,以便"printing: 20" + y
等于"printing: 2010"
。
在第二种情况下,乘法是先验的。因此,首先计算x * y
并等于200
。然后"printing: " + 200
等于"printing: 200"
。
答案 2 :(得分:4)
您观察到的结果肯定与运营商优先级以及评估顺序有关。在没有其他规则(即具有更高优先级的运算符)的情况下,运算符按从左到右的顺序进行评估。
在第一个表达式中,所有运算符都具有相同的优先级,因为它们是相同的运算符:+
,因此评估第一个运算符。由于它涉及String
,因此String
连接,结果为String
;同样适用于以下+
。
在第二个表达式中,其中一个运算符为*
,其优先级高于+
,因此首先进行求值。你得到乘法的结果,一个整数,然后然后 String
和int
的串联由于+
。
答案 3 :(得分:1)
这将打印30
:
System.out.println("printing: " + (x + y))
您需要括号来表达您希望的优先顺序。
答案 4 :(得分:1)
适用于运营商优先级
System.out.println("printing: " + x * y);
此处*运算符的优先级高于+,因此首先计算x * y
。
System.out.println("printing: " + x + y);
这里所有都是相同的运算符,它将被视为字符串连接操作,因为有一个string
值。
如果您将括号括起来 - System.out.println(“printing:”+(x + y));
然后括号(运算符的优先级高于+,所以首先计算(x + y)
并打印30
答案 5 :(得分:0)
在第一个打印行中,+运算符首先应用于String和int之间,结果是一个String,它再次与另一个int连接,产生一个String。
在第二行中,操作的顺序是:首先将乘法和结果int连接到字符串。
答案 6 :(得分:-1)
System.out.println("2*("+a"+"+b"*"+c")")
如何打印