重複の可能性:
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.
重複の可能性:
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.
int x=5;
System.out.println((x++)*x); //Gives output as 30
最初にオペランドとして x (x = 5) を取ります。次に、第 2 オペランドである 6 にインクリメントされます。
int x=5;
System.out.println((++x)*x); //Gives output as 36.
最初に x を 1 増やし (x = 6)、次に x を掛けます => 6 * 6 = 36
乗算は左から右への結合であるため、左のオペランドが最初に評価され、次に右のオペランドが評価されます。
ポストインクリメント演算子は、変数の現在の値に評価され、直後にインクリメントされます。
プレインクリメント演算子は、変数をインクリメントしてから、インクリメントされた値に評価します。
(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 になります。
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
次のことを理解していると仮定します。
++x
を返しx+1
、インクリメントしますx
。x++
リターンx
とインクリメントx
、結果の理由は、Java 言語仕様 #15.17で定義されています。
乗法演算子は同じ優先順位を持ち、構文的に左結合です (左から右にグループ化されます)。
したがって、最初のケースでは、x++
が最初に評価され、5 が返され (これは後置演算子です)、x
その後に 1 が追加されます。次に、x++
(5)の結果に(現在は6)を掛けx
ます==> 30
2 番目のケースでは、++x
が最初に評価され、 に 1 が加算されてx
6 が返されます (前置演算子です)。次に、(6) の結果に++x
(現在は 6) を掛けx
ます ==> 36
ポストインクリメント演算子は、式が計算された後にインクリメントを行います。
最初の例では、実際に起こっていることは次のとおりです。
(x++) * x ; // (now incremented, 6 )
// x (5) * x+1 (6)
2番目の例では、インクリメントが最初に発生します
(++x) * x; // incremented straight away.
// x+1 (6) * x (now 6)