串联字符串和数字Java

h4c*_*k3d 17 java

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

int x=20,y=10;

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

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

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

Kum*_*tra 21

它的BODMAS规则

我在下面从高到低显示优先顺序:

B  - Bracket 
O  - Power
DM - Division and Multiplication
AS - Addition and Substraction
Run Code Online (Sandbox Code Playgroud)

如果运算符具有相同的优先级,此方法有效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));
Run Code Online (Sandbox Code Playgroud)

的优先顺序 BracketAddition.


Sam*_*son 8

基本数学告诉您每次添加数字.

所以"printing: " + x首先计算.因为它string + int的结果是"printing: 20".然后添加y这样"printing: 20" + y等于"printing: 2010".

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