乘法场景中前/后增量运算符的行为

时间:2012-07-19 09:23:24

标签: java

  

可能重复:
  Is there a difference between x++ and ++x in java?

有谁能请解释一下这些陈述后院发生了什么?

int x=5;
 System.out.println((x++)*x); //Gives output as 30




int x=5;
 System.out.println((++x)*x); //Gives output as 36.

5 个答案:

答案 0 :(得分:7)

int x=5;
 System.out.println((x++)*x); //Gives output as 30

首先将x(x = 5)作为操作数。然后它增加到6,这是第二个操作数。

int x=5;
 System.out.println((++x)*x); //Gives output as 36.

首先将x递增1(x = 6),然后乘以x => 6 * 6 = 36

答案 1 :(得分:4)

p++ means use then increment with a copy (copy is extremely local)

++p means increment and use without a copy


p++: use 5 and use incremented thing later in that line

++p: increment and use immediately

答案 2 :(得分:4)

乘法是从左到右的关联,所以首先计算左操作数,然后是右操作数。

后增量运算符将计算变量的当前值,并在之后立即递增。

预增量运算符将递增变量,然后计算增量值。

    (x++) * x (x = 5)
--> 5 * x (increment deferred, x = 5)
--> 5 * x (increment x, x = 6)
--> 5 * 6
--> 30

    (++x) * x (x = 5)
--> 6 * x (x is incremented before evaluated into expression, x = 6)
--> 6 * 6
--> 36

我在这里提到了关联性,因为它会影响最终结果。如果乘法的相关性是从右到左而不是从左到右,则结果将分别为25和30,分别用于后增量和预增量表达式。

答案 3 :(得分:4)

假设您明白:

  • ++x返回x+1并递增x,而
  • x++返回x并递增x

结果的原因由Java Language Specification #15.17

定义
  

乘法运算符具有相同的优先级,并且在语法上是左关联的(它们从左到右分组)。

因此,在第一种情况下,首先评估x++,然后返回5(它是后缀运算符)并在之后将{1}}加1。然后x(5)的结果乘以x++(现在是6)==> 30

在第二种情况下,首先评估x,它向++x添加1并返回6(它是前缀运算符)。然后x(6)的结果乘以++x(现在是6)==> 36

答案 4 :(得分:3)

增量后运算符在计算表达式后进行递增。

在您的第一个示例中,实际发生的是: -

(x++)  * x ; // (now incremented, 6 )
// x (5) * x+1 (6)

在第二个例子中,首先发生增量

(++x)  * x; // incremented straight away.
// x+1 (6) * x (now 6)