为什么这些情况下输出不同?
int x=20,y=10;
System.out.println("printing: " + x + y);
==> printing: 2010
System.out.println("printing: " + x * y);
==> printing: 200
为什么第一个输出结果不是30呢?这和操作符优先级有关吗?比如先将"printing"和x连接起来,然后将得到的字符串和y连接起来?我的理解正确吗?
为什么这些情况下输出不同?
int x=20,y=10;
System.out.println("printing: " + x + y);
==> printing: 2010
System.out.println("printing: " + x * y);
==> printing: 200
为什么第一个输出结果不是30呢?这和操作符优先级有关吗?比如先将"printing"和x连接起来,然后将得到的字符串和y连接起来?我的理解正确吗?
这是 BODMAS
规则。
下面是按从高到低的优先顺序展示:
B - Bracket
O - Power
DM - Division and Multiplication
AS - Addition and Substraction
如果运算符具有相同的优先级,则从左向右执行。
现在:
System.out.println("printing: " + x + y);
"printing: "
: 是一个字符串
"+"
:是Java中唯一重载的运算符,可将数字连接到字符串。由于此处存在2个"+"运算符,并且"printing:" +
已经发生了,所以它也会将x和y视为字符串。
因此输出为2010。
System.out.println("printing: " + x * y);
这里:
"*"
:比+
具有更高的优先级
所以首先执行x*y
然后执行printing: +
因此输出为200。
如果想要在第一个例子中得到200,请像这样操作:
System.out.println("printing: "+ (x+y));
括号的优先级高于加法
。
基本数学告诉我们,将数字相加是逐个完成的。
因此,先计算"printing: " + x
。由于它是一个字符串 + 整数
,结果为"printing: 20"
。然后再加上y
,所以"printing: 20" + y
等于"printing: 2010"
。
在第二种情况下,乘法具有优先权。因此,首先计算x * y
,结果为200
。然后"printing: " + 200
等于"printing: 200"
。
这是用于操作符优先级的
System.out.println("printing: " + x * y);
在这里,* 运算符比 + 运算符的优先级更高,因此首先计算 x * y
。
System.out.println("printing: " + x + y);
在这里,所有的操作符都是相同的,因为有一个string
值,所以它将被视为字符串连接操作。
如果你把括号加进去 - System.out.println("printing: " + (x + y));
那么括号(操作符比+优先级更高,所以它将首先计算(x + y)
并打印30
这将打印30
:
System.out.println("printing: " + (x + y))
您需要使用括号来表达您想要的优先级。
System.out.println("2*("+a"+"+b"*"+c")")