Heim >Java >javaLernprogramm >Warum führt „j = j' dazu, dass „j' in Java bei 0 bleibt?
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!