Was ist das Ergebnis des Ausführens des folgenden Codes?
Paket com.test; public class Inc {public static void main (String [] args) {Inc. Inc = new Inc (); int i = 0; Inc.fermin (i); i = i ++; System.out.println (i); } void fermin (int i) {i ++; }}Das Ergebnis ist: 0
Das Ergebnis des Ausführens des obigen ähnlichen Code in C/C ++ ist: 1. Warum ist das so?
Dies liegt daran, dass Java einen mittleren Cache -Variablenmechanismus verwendet:
i = i ++; Äquivalent zu:
temp = i; (Ich auf der rechten Seite des gleichen Zeichens)
i = i+1; (Ich rechts vom gleichen Zeichen)
i = temp; (Ich auf der linken Seite des gleichen Zeichens)
Und i = ++ i; entspricht:
i = i+1;
temp = i;
i = temp;
Detaillierte Erklärung:
Es gibt zwei Speicherbereiche in JVM, einer ist der temporäre Speicherbereich (ein Stapel, der als Stapel unten bezeichnet wird) und der andere der variable Bereich.
JVM wird diese Aussage wie diese ausführen:
Schritt 1 JVM Kopieren Sie den Wert von i (sein Wert beträgt 0) in den temporären variablen Bereich (temp = 0).
Schritt 2 Fügen Sie den Wert des variablen Bereichs I zu 1 hinzu, und der Wert von I beträgt 1.
Schritt 3 Geben Sie den Wert des temporären Variablenbereichs (TEMP) zurück. Beachten Sie, dass dieser Wert 0 beträgt und nicht geändert wurde.
Schritt 4 Der Rückgabewert wird I im variablen Bereich zugewiesen, und der Wert von I wird auf 0 zurückgesetzt.
Es gibt keine andere vorübergehende Variable oder temporäre Speicherplatz, um i in C/C ++ zu speichern. Alle Vorgänge sind in einem Speicherraum abgeschlossen, so dass es 1 in C/C ++ ist.
Die obige Einführung in das Problem der Selbstverhinderung in Java ist der gesamte Inhalt, den ich mit Ihnen geteilt habe. Ich hoffe, Sie können Ihnen eine Referenz geben und ich hoffe, Sie können wulin.com mehr unterstützen.