Heim >Java >javaLernprogramm >Warum führt „j = j' in Java zu 0, aber „a = b' erhöht „b' auf 1?
Post-Inkrement-Operator in Java
Der Java-Post-Inkrement-Operator ( ) sorgt aufgrund seines einzigartigen Verhaltens oft für Verwirrung bei Programmierern. In diesem Artikel werden wir die Feinheiten des Post-Inkrement-Operators untersuchen und darauf eingehen, warum der folgende Codeausschnitt aus „Java Puzzlers“ von Joshua Bloch unerwartete Ergebnisse liefert:
<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>
Basierend auf der Erklärung des Autors, dem Ausdruck j = j sollte sich ähnlich wie folgt verhalten:
<code class="java">temp = j; j = j + 1; j = temp;</code>
Diese Logik impliziert, dass der Wert von j inkrementiert und dann j zugewiesen werden sollte, was zu einem Inkrement ähnlich dem Ausdruck a = b führt. Im letzteren Fall wird der Post-Inkrement-Operator jedoch in einem anderen Kontext verwendet, was zu einem anderen Ergebnis führt.
Die korrekte Auswertung von a = b ist tatsächlich wie folgt:
<code class="java">temp = b; b = b + 1; // increment a = temp; // then assign</code>
Dies steht im Einklang mit der Java Language Specification (JLS), die besagt, dass für Postfix-Inkrementausdrücke „der Wert 1 zum Wert der Variablen addiert und die Summe wieder in der Variablen gespeichert wird“. Daher weist a = b a den ursprünglichen Wert von b (0) zu, bevor b auf 1 erhöht wird.
Wenn wir zum Ausdruck j = j zurückkehren, können wir nun sehen, dass der Post-Inkrement-Operator dazu führt, dass j ausgewertet wird vor dem Inkrement, was zu einer konstanten Zuweisung von 0 führt. Die in der Erklärung des Autors hinzugefügte temporäre Variable ist eigentlich nicht an der Post-Inkrement-Auswertung beteiligt.
Durch das Verständnis des wahren Verhaltens des Post-Inkrement-Operators können wir dies vermeiden Vermeiden Sie Verwirrung und stellen Sie eine genaue Codeausführung sicher.
Das obige ist der detaillierte Inhalt vonWarum führt „j = j' in Java zu 0, aber „a = b' erhöht „b' auf 1?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!