2017-06-10 81 views
-1

下面是我試圖理解的Java代碼部分。我想知道爲什麼num2減少,但在評估if語句時不使用它的結果。當我將「num2--」更改爲「num2 - 1」時,它會返回我期望的內容:「true12」。
我錯過了什麼?我正在使用IntelliJ IDEA CE 2017.1在if語句中有條件的數學表達式的評估

boolean flag = false; 
    int num1 = 1, num2 = 2; 

    if ((num1) == (num2--)) { 
     flag = true; 
    } 
    System.out.println("flag, num1, num2: " + flag + num1 + num2); 

這給輸出:

flag, num1, num2: false11 

Process finished with exit code 0 
+1

'num2 - '與'num2 = num2 - 1'相同。 if((num1)==(num2 = num2 - 1)){' –

+0

閱讀更多關於後綴和前綴運算符的信息 –

+0

@ElliottFrisch if((num1)==(num2 = num2-1))'與'if((num1)==(--num2))',而不是'if((num1)==(num2 - ))'。 – Andreas

回答

0

當你有一個--++旁邊的整數變量,它實際上修改該變量。與variable - 1相反,它只是在不修改變量的情況下返回操作的結果。

所以

int num = 5; 
int num2 = num - 1; 
System.out.println(num); #will print 5 
System.out.println(num2); #will print 4 
num--; #Actually decreases num. Is the same as num = num - 1 
System.out.println(num); #will print 4 

--numnum--之間的不同之處在於,在第一種情況下遞減總是會之前在同一行中的任何其他操作完成,而在後一種情況下的遞減會做後。

這可能是最好的例子。

int res = num-- + 7; 

相同

int res = num + 7; 
num = num - 1; 

int res = --num + 7; 

相同

num = num - 1; 
int res = num + 7; 

我希望幫助。

+0

謝謝,我看到我錯過了發佈和前綴操作的概念。 – wonthegame

0

if語句的比較第一個完成。這意味着評估表達式(1 == 2)。在這個聲明之後,num2將減1。這意味着打印結果應該產生:False 1 1.

如果您將num2--更改爲--num2,則在進行比較之前,num2將減1。因此,結果將是真實的1.

0

這是因爲num2--冷杉使用數字,然後decrease.i.e首先進行比較,然後減少(第二行)。 基本上首先是(1==2)完成,然後在第二行num2=num2-1;完成。 而不是num2--你應該使用'--num2',因爲這將首先減少數量,然後將比較它。