Heim  >  Artikel  >  Java  >  Warum führt „j = j“ dazu, dass „j“ in Java bei 0 bleibt?

Warum führt „j = j“ dazu, dass „j“ in Java bei 0 bleibt?

Linda Hamilton
Linda HamiltonOriginal
2024-10-26 21:35:03430Durchsuche

Why Does `j = j  ` Result in `j` Staying at 0 in Java?

Post-Inkrement-Operator in Java

Der folgende Codeausschnitt aus Joshua Blochs „Java Puzzlers“ erscheint auf den ersten Blick rätselhaft:

<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); // prints 0
        System.out.println(b); // prints 1
    }
}</code>

Verwirrung über Post-Inkrement

Der verwirrende Teil ist das Verhalten von j = j , das dazu führt, dass j bei 0 bleibt. Nach Angaben des Autors ähnelt dieser Ausdruck :

<code class="java">temp = j;
j = j + 1;
j = temp;</code>

Im Fall von a = b wird b jedoch tatsächlich zu 1, was inkonsistent erscheint.

Den Unterschied verstehen

Um diese Verwirrung zu beseitigen, müssen wir die Regel für den Postfix-Inkrementoperator ( ) verstehen:

lhs = rhs++;

Entspricht:

temp = rhs;
rhs = rhs + 1;
lhs = temp;

Anwenden der Regel

Anwenden dieser Regel auf a = b ergibt sich:

temp = b;
b = b + 1;
a = temp;

Daher erhält a den ursprünglichen Wert von b (der 0 ist) und b wird dann auf 1 erhöht.

Im Fall von j = j

Ähnlich ergibt die Anwendung der Regel auf j = j:

temp = j;
j = j + 1;
j = temp;

Da die Temperatur gleich dem Original ist Wert von j (der 0 ist), j wird auf 1 erhöht, dann aber sofort mit dem ursprünglichen Wert (0) überschrieben, was dazu führt, dass j bei 0 bleibt.

Schlussfolgerung

Der Schlüssel zum Verständnis des Verhaltens des Post-Inkrement-Operators besteht darin, sich an die Regel zu erinnern, dass lhs = rhs ein zweistufiger Prozess ist: Zuerst wird temp der aktuelle Wert von rhs zugewiesen, dann wird rhs inkrementiert und schließlich wird temp zugewiesen nach links.

Das obige ist der detaillierte Inhalt vonWarum führt „j = j“ dazu, dass „j“ in Java bei 0 bleibt?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn