可能重複:
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.
可能重複:
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.
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
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 (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。
後計算增量運算符在計算表達式後進行增量。
在你的第一個例子,什麼是真正發生的事情是: -
(x++) * x ; // (now incremented, 6)
// x (5) * x+1 (6)
在第二個例子中,增量首先發生
(++x) * x; // incremented straight away.
// x+1 (6) * x (now 6)
假設你明白:
++x
返回x+1
並增加x
,而x++
返回x
和增量x
,的結果的原因是由Java Language Specification #15.17
定義的乘法運算符具有相同的優先級和在語法上左結合(它們組左到右)。
因此,在第一種情況下,x++
首先計算,這將返回5(它是後綴運算符),並增加了1到x
之後。然後x++
的結果(5)由x
相乘(這是現在6)==> 30
在第二種情況下,++x
首先計算,這增加了1〜x
,並返回圖6(它是前綴操作者)。然後++x
(6)的結果乘以x
(現在是6)==> 36
@PrinceJohnWesley不是真的重複的恕我直言。 – assylias 2012-07-19 09:41:56