4

可能重复:
java中的x++和++x有区别吗?

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

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




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

5 回答 5

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 加一 (x = 6),然后乘以 x => 6 * 6 = 36

于 2012-07-19T09:26:36.910 回答
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
于 2012-07-19T09:26:32.250 回答
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。

于 2012-07-19T09:27:58.800 回答
4

假设你明白:

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

结果的原因由Java 语言规范 #15.17定义

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

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

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

于 2012-07-19T09:35:29.553 回答
3

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

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

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

在您的第二个示例中,增量首先发生

(++x)  * x; // incremented straight away.
// x+1 (6) * x (now 6)
于 2012-07-19T09:30:12.353 回答