Java 中的後置自增運算子
Java 後置自增運算子( ) 由於其獨特的行為,常常讓程式設計師感到困惑。在本文中,我們將探討後增量運算子的複雜性,並解釋為何Joshua Bloch 的「Java Puzzlers」中的以下程式碼片段會產生意外結果:
<code class="java">public class Test22 { public static void main(String[] args) { int j = 0; for (int i = 0; i < 100; i++) { j = j++; } System.out.println(j); // prints 0 int a = 0, b = 0; a = b++; System.out.println(a); System.out.println(b); // prints 1 } }</code>
根據作者的解釋,表達式j = j 的行為應類似於以下內容:
<code class="java">temp = j; j = j + 1; j = temp;</code>
此邏輯意味著j 的值應遞增,然後分配給j,從而產生類似於表達式a = b 的增量。然而,在後一種情況下,後增量運算子在不同的上下文中使用,導致不同的結果。
a = b 的正確計算實際上如下:
<code class="java">temp = b; b = b + 1; // increment a = temp; // then assign</code>
這與Java 語言規範(JLS) 一致,該規範規定,對於後綴增量表達式,「將值1加到變數的值中,並將總和儲存回變數中」。因此,a = b 在將 b 遞增到 1 之前將 b (0) 的原始值賦給 a。
返回表達式 j = j ,我們現在可以看到後遞增運算子導致 j 被計算在增量之前,導致常數賦值為0。作者解釋中加入的temp變數其實並沒有參與後增量求值。
透過了解後增量運算子的真實行為,我們可以避免混淆並確保準確的程式碼執行。
以上是為什麼 Java 中 `j = j` 的結果是 0,而 `a = b` 卻將 `b` 增加到 1?的詳細內容。更多資訊請關注PHP中文網其他相關文章!