首頁 > Java > java教程 > 主體

為什麼 Java 中 `j = j` 的結果是 0,而 `a = b` 卻將 `b` 增加到 1?

Mary-Kate Olsen
發布: 2024-11-04 08:44:01
原創
639 人瀏覽過

Why does `j = j  ` result in 0 in Java, but `a = b  ` increments `b` to 1?

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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板