为什么在这些情况下输出不同?
int x=20,y=10;
System.out.println("printing: " + x + y);
==> 印刷:2010
System.out.println("printing: " + x * y);
==> 打印:200
为什么第一个输出不是 30?它与运算符优先级有关吗?就像第一个“打印”和 x 被连接,然后这个结果字符串和 y 被连接?我对么?
为什么在这些情况下输出不同?
int x=20,y=10;
System.out.println("printing: " + x + y);
==> 印刷:2010
System.out.println("printing: " + x * y);
==> 打印:200
为什么第一个输出不是 30?它与运算符优先级有关吗?就像第一个“打印”和 x 被连接,然后这个结果字符串和 y 被连接?我对么?
它的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
基本数学告诉您,每次添加数字都是一次完成。
所以"printing: " + x
首先计算。结果string + int
是"printing: 20"
。然后你添加y
so "printing: 20" + y
equals "printing: 2010"
。
在第二种情况下,乘法是优先的。所以首先x * y
计算并等于200
。然后"printing: " + 200
等于"printing: 200"
。
您观察到的结果肯定与运算符优先级以及评估顺序有关。在没有其他规则(即更高优先级的运算符)的情况下,运算符按从左到右的顺序进行评估。
在第一个表达式中,所有运算符具有相同的优先级,因为它们是相同的 operator: +
,因此对第一个运算求值。既然涉及到a String
,那就是String
串联,结果是a String
;以下类似+
。
在第二个表达式中,运算符之一是*
,它的优先级高于+
,因此首先计算。你得到乘法的结果,一个整数,然后是 aString
和 an的连接,int
因为+
.
这将打印30
:
System.out.println("printing: " + (x + y))
您需要括号来表达您希望的优先级。
它用于运算符优先级
System.out.println("printing: " + x * y);
这里 * 运算符的优先级高于 + 所以首先它计算x * y
.
System.out.println("printing: " + x + y);
在这里,所有操作符都是相同的,它将被视为字符串连接操作,因为那里只有一个string
值。
如果您在其中涉及括号 - System.out.println("printing: " + (x + y));
然后括号 ( 运算符的优先级高于 + 所以首先它会计算(x + y)
并打印30
在第一个打印行中,首先在 String 和 int 之间应用 + 运算符,结果是一个 String,它再次与另一个 int 连接,产生一个 String。
在第二行中,操作的顺序是:首先将乘法和结果 int 连接到 String。
System.out.println("2*("+a"+"+b"*"+c")")
这个怎么打印