Häufige Fragen für Java-Anfänger: i = i + 1; ausführliche Erklärung

Inhaltsverzeichnis

1. Phänomen

2.Analyse

3. Vergleich mit der C-Sprache


1. Phänomen

Beachten Sie den folgenden Code:

int i = 1;
i = i++;
System.out.println("i = " + i);

       Gemäß den Verwendungsregeln des arithmetischen Operators ++ wird i zuerst zugewiesen und dann addiert oder subtrahiert. i sollte zuerst ein Wert von 1 zugewiesen werden und dann um 1 erhöht werden, sodass das endgültige Ausgabeergebnis von i theoretisch gleich 2 sein sollte.

Tatsächlich ist der Wert von i jedoch immer noch 1.

Operationsergebnis:

i = 1

2.Analyse

        Diese Situation tritt bei JRE (Java Runtime Environment) auf ) hängt mit dem Betriebsmechanismus von JVM (Java Virtual Machine) zusammen. .

Beim Umgang mit i = i++;:

        Erster Schritt: JVM erstellt eine temporäre Variable zum Speichern des Wertes i und weist sie < zu /span> . Der Wert des linken Werts i

        Der zweite Schritt:Javas virtuelle Maschine (d. h. JVM) berechnet den Wert von i++. Das heißt, ich werde auf 2 erhöhen.

        Schritt 3:Dann weisen Sie i den in der temporären Variablen gespeicherten Wert zu (d. h. i vor dem Inkrementieren), sodass der Wert von i immer noch 1 ist. 

        Das Problem besteht darin, dass die temporäre Variable, die von der JVM zum Speichern von i erstellt wurde, bevor sie inkrementiert wird, aufgrund der Ausführung das Post-i++ überschreibt Bestellprobleme. Der Wert von (d. h. die Auswirkung von i seit der Erhöhung).

        Gehen Sie davon aus, dass die temporäre Variable den Namen temp trägt. Der einfache Vorgang ist wie folgt:

//当i++时
int i = 1;
i = i++;

(1)temp = i; --->(2)i = i + 1; --->(3)i = temp;

//当++i时
int i = 1;
i = ++i;

(1)i = i + 1; --->(2)temp = i; --->(3)i = temp;

3. Vergleich mit der C-Sprache

Den gleichen Code in C schreiben:

int i = 1;
int i = i++;
printf("i = %d", i);

Operationsergebnis: 

i = 2;

        Das Schreiben desselben Codes in der C-Sprache führt in Java zu unterschiedlichen Effekten. Der Grund dafür ist: In der C-Sprache konvertiert der Computer zuerst rvalue i linken Wert i zugewiesen, zu diesem Zeitpunkt ist der Wert von i 1. Wenn i++ erneut berechnet wird, wird i um 1 erhöht, sodass der Endwert von i 2 ist. In Java gibt es kein Problem, dass der Anfangswert den Wert nach i++ überschreibt.

Ich denke du magst

Origin blog.csdn.net/2301_76876039/article/details/133971656
Empfohlen
Rangfolge