Quel est le résultat de l'exécution du code suivant?
package 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 ++; }}Le résultat est: 0
Le résultat de l'exécution du code similaire ci-dessus en C / C ++ est: 1. Pourquoi est-ce?
En effet, Java utilise un mécanisme de variable de cache intermédiaire:
i = i ++; équivalent à:
temp = i; (I sur le côté droit du signe égal)
i = i + 1; (I à droite du signe égal)
i = temp; (I sur le côté gauche du signe égal)
Et i = ++ i; équivaut à:
i = i + 1;
temp = i;
i = temp;
Explication détaillée:
Il y a deux zones de stockage dans JVM, l'une est la zone de stockage temporaire (une pile, appelée pile ci-dessous), et l'autre est la zone variable.
JVM exécutera cette déclaration comme ceci:
Étape 1 JVM Copiez la valeur de I (sa valeur est 0) à la zone de variable temporaire (temp = 0).
Étape 2 Ajoutez la valeur de la zone variable I à 1, et la valeur de i est 1.
Étape 3 Renvoie la valeur de la zone variable temporaire (TEMP). Notez que cette valeur est 0 et n'a pas été modifiée.
Étape 4 La valeur de retour est attribuée à I dans la zone variable, et la valeur de i est réinitialisée à 0.
Il n'y a pas d'autre espace variable ou temporaire temporaire pour enregistrer I en C / C ++. Toutes les opérations sont terminées dans un seul espace mémoire, il est donc de 1 en C / C ++.
L'introduction ci-dessus au problème d'auto-augmentation de Java est tout le contenu que j'ai partagé avec vous. J'espère que vous pourrez vous faire référence et j'espère que vous pourrez soutenir Wulin.com plus.