串联字符串和数字Java

时间:2012-08-19 18:09:38

标签: java

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

int x=20,y=10;

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

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

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

7 个答案:

答案 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;同样适用于以下+

在第二个表达式中,其中一个运算符为*,其优先级高于+,因此首先进行求值。你得到乘法的结果,一个整数,然后然后 Stringint的串联由于+

答案 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

check detail operator precedence order

答案 5 :(得分:0)

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

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

答案 6 :(得分:-1)

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

如何打印