18

为什么在这些情况下输出不同?

int x=20,y=10;

System.out.println("printing: " + x + y); ==> 印刷:2010

System.out.println("printing: " + x * y); ==> 打印:200

为什么第一个输出不是 30?它与运算符优先级有关吗?就像第一个“打印”和 x 被连接,然后这个结果字符串和 y 被连接?我对么?

4

7 回答 7

26

它的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

于 2012-08-19T18:19:09.297 回答
8

基本数学告诉您,每次添加数字都是一次完成。

所以"printing: " + x首先计算。结果string + int"printing: 20"。然后你添加yso "printing: 20" + yequals "printing: 2010"

在第二种情况下,乘法是优先的。所以首先x * y计算并等于200。然后"printing: " + 200等于"printing: 200"

于 2012-08-19T18:13:23.180 回答
4

您观察到的结果肯定与运算符优先级以及评估顺序有关。在没有其他规则(即更高优先级的运算符)的情况下,运算符按从左到右的顺序进行评估。

在第一个表达式中,所有运算符具有相同的优先级,因为它们是相同的 operator: +,因此对第一个运算求值。既然涉及到a String,那就是String串联,结果是a String;以下类似+

在第二个表达式中,运算符之一是*,它的优先级高于+,因此首先计算。你得到乘法的结果,一个整数,然后是 aString和 an的连接,int因为+.

于 2012-08-19T18:14:00.500 回答
1

这将打印30

System.out.println("printing: " + (x + y))

您需要括号来表达您希望的优先级。

于 2012-08-19T18:11:02.747 回答
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

检查详细运算符优先顺序

于 2012-08-19T18:18:54.070 回答
0

在第一个打印行中,首先在 String 和 int 之间应用 + 运算符,结果是一个 String,它再次与另一个 int 连接,产生一个 String。

在第二行中,操作的顺序是:首先将乘法和结果 int 连接到 String。

于 2012-08-19T18:14:19.233 回答
-1

System.out.println("2*("+a"+"+b"*"+c")")

这个怎么打印

于 2018-05-01T17:41:22.127 回答