Yann Secq:

> Bonjour, j'ai un comportement que je n'arrive pas � expliquer
> avec l'op�rateur de post-incr�mentation en Java :

> public class Test
> {
>   public static void main(String[] args){
>     int taille = 0;
>     taille = taille++;
>     System.out.println(taille);
>   }
> }
> Affiche 0 ! Ou est pass�e ma post-incr�mentation ?


Elle a ete effectuee ;-)
Justement, il s'agit d'une post-incrementation donc effectuee apres le 
calcul de l'expression. Ton code est equivalent a:
int taille=0;
int expression = taille;
taille++;
taille=expression;
C'est effectivement tres trompeur. Pour ma part, je n'utilise cet 
operateur que seul (typiquement: i++; )

Compiled from Incrementation.java
public class Incrementation extends java.lang.Object {
     public static void main(java.lang.String[]);
     public Incrementation();
}
Method void main(java.lang.String[])
    0 iconst_0
    1 istore_1
    2 iload_1
    3 iinc 1 1       <<--- ICI
    6 istore_1
    7 getstatic #12 <Field java.io.PrintStream out>
   10 iload_1
   11 invokevirtual #18 <Method void println(int)>
   14 return

Method Incrementation()
    0 aload_0
    1 invokespecial #24 <Method java.lang.Object()>
    4 return

> Le meme programme en C, donne lui le r�sultat attendu (1) :

> #include <stdio.h>
> void main() {
>   int taille = 0;
>   taille = taille++;
>   printf("%d\n",taille);
> }
> Quelqu'un pourrait-il m'expliquer pourquoi Java ne se comporte
> pas de la meme fa�on que le programme en C ?

La, ca devient carrement genant, mais je suppose que ca doit etre dans 
la JLS. Java n'a que la syntaxe du C, pas sa semantique ;-)

Guillaume




Répondre à