2014-02-21 16 views
0

我在看這個Java代碼:在Java中,何時發生後增量操作?

 while (n-- != 0) { 
      if (searchMe.charAt(j++) != substring.charAt(k++)) { 
       continue test; 
      } 
     } 

我感到困惑的時候,準確地說,n--操作發生。是否在if聲明之後?

+3

沒有這樣的事情作爲「如果循環」。 – ubiquibacon

+0

@ubiquibacon - 啊是的;-)好的確定謝謝 – Coffee

回答

5

每次評估while條件時都會發生n--操作;特別是在評估!=運算符的左側時。它與if聲明無關。在每次循環迭代開始時評估while條件;如果它的計算結果爲true,則會執行while循環的主體(if語句),但在n--操作完成之後就會執行該操作。 (但當然,接下來的循環迭代。)

1

當while循環第一次運行時,如果n的值不等於零(因爲它是後減量),則檢查n的值。

一旦條件得到評估,即進入while循環之後,n的值將減1(n-1)。這個新值將在while循環中用於特定的迭代。

當while循環檢查條件時,下一次迭代檢查值(n-1)是否等於零,等等。

+2

實際上,當評估'while'循環測試時,無論是否輸入循環,'n'的值都會遞減。因此,舉例來說,如果'while'循環首次運行時'n == 0',那麼'while'循環後面的語句'n'將是'-1'。 –

+0

是的,我同意你泰德霍普。 :) –

1

--++運算符如果放在操作數之後會在包含它的語句結束後發生。如果放在操作數之前,那麼它會在該語句之前發生。

在這種情況下,聲明是while所以它會在它之後發生,意思是在評估while聲明中的條件之後。

+0

增量或減量發生在評估操作員時,這可能會在語句完成之前發生。因此,像'a [i ++] = a [i]'這樣的語句會將一個元素複製到數組'a'的前一個元素中。 (也就是說,評估右側「a [i]」時的'i'的值是通過評估[數組訪問表達式](http:// docs.oracle.com/javase/specs/jls/se7/html/jls-15.html#jls-15.13)作業左側的'a [i ++]'。) –