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
Freigeben: 2024-11-04 08:44:01
Original
709 Leute haben es durchsucht

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage