Y a-t-il une différence entre ++x et x++ en java ?
Ne devrait-il pas être suffix
?
Y a-t-il une différence entre ++x et x++ en java ?
J'ai atterri ici à la suite d'une de ses récentes dup et bien que cette question soit plus que répondue, je n'ai pas pu m'empêcher de décompiler le code et d'ajouter "encore une autre réponse" :-)
Pour être précis (et probablement un peu pédant),
int y = 2;
y = y++;
est compilé dans :
int y = 2;
int tmp = y;
y = y+1;
y = tmp;
Si vous javac
cette Y.java
classe :
public class Y {
public static void main(String []args) {
int y = 2;
y = y++;
}
}
et javap -c Y
vous obtenez le code jvm suivant (je me suis permis de commenter la méthode principale à l'aide de la balise Spécification de la machine virtuelle Java ) :
public class Y extends java.lang.Object{
public Y();
Code:
0: aload_0
1: invokespecial #1; //Method java/lang/Object."<init>":()V
4: return
public static void main(java.lang.String[]);
Code:
0: iconst_2 // Push int constant `2` onto the operand stack.
1: istore_1 // Pop the value on top of the operand stack (`2`) and set the
// value of the local variable at index `1` (`y`) to this value.
2: iload_1 // Push the value (`2`) of the local variable at index `1` (`y`)
// onto the operand stack
3: iinc 1, 1 // Sign-extend the constant value `1` to an int, and increment
// by this amount the local variable at index `1` (`y`)
6: istore_1 // Pop the value on top of the operand stack (`2`) and set the
// value of the local variable at index `1` (`y`) to this value.
7: return
}
C'est ainsi que nous avons enfin :
0,1: y=2
2: tmp=y
3: y=y+1
6: y=tmp
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.