Heim >Java >javaLernprogramm >Warum führt „j = j' in Java zu 0, aber „a = b' erhöht „b' auf 1?

Warum führt „j = j' in Java zu 0, aber „a = b' erhöht „b' auf 1?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-11-04 08:44:01699Durchsuche

Why does `j = j  ` result in 0 in Java, but `a = b  ` increments `b` to 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!

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