int a = 9;
a = a++;
System.out.println("a = " + a);输出 a 等于9。为什么不得10呢?
a = a++; 不应看成 先 a = a; 再 a = a+1; 吗??

解决方案 »

  1.   

    http://blog.csdn.net/ZangXT/archive/2008/11/05/3229281.aspx
      

  2.   

    首先执行a++,这时a=10,但表达式a++的值为9,然后又把9赋给了a,所以最后a=9
      

  3.   

    a = a++; 
    顺序应该是:取出a的值为9,然后a++(这时a=10);最后a = 9;
    所以a=9;
      

  4.   

    a=a++;这句的执行是这样的:a=a,然后a++,是"a++"这个表达式等于10.
      

  5.   

    二楼的答案很详细啊~
    java是先把i的值取出来放到栈顶,我们可以认为是引入了第三个变量int k=i;然后i++,这时候i为1了,然后让j=k;也就是0.结论,i的++运算是在对j这个变量的赋值之前完成的。
    我的理解是,由于++的优先级别比赋值操作=的优先级别高,而sun公司开发jdk时为了给出规范
    所以会造成现在的结果
    至于9楼的问题
    用反编译软件啊!~
      

  6.   

    当然 我县根据实际结果 总结一下结论
    以后看见后加加 如
    g=h++; 或 h=h++;
    同一当作
    g=h; 及 h=h;
    处理。而前加加好说 按书上讲的 拆成
    先h++;
    再g=h; 或 h=h;
    -----------
    另外问下 2楼怎么反汇编的?
      

  7.   

    反编译.class 只得到.java 
      

  8.   


    答:在JAVA中, 若a是int类型 ,则:  a++ 相当于: 
     int t;
     t=a;
     a=a+1;
     此时表达式本身(a++)的值都用t去赋值.
    因此:  a = a++; 相当于:
     int t=a;//t=9
     a=a+1;// a=10;
     a=t;// 用t去赋值,故 a=9再如:
    int a = 9;
     a=(a++)+(++a);
    问:a=?
    答:第一个(a++) 相当于:
     int t1;
     t1=a;//t1=9
     a=a+1;//a=10;
     此时t1值就是(a++)表达式的值
     第二个(++a) 相当于:
     int t2;
     a=a+1;//a=11
     t2=a;//t2=11
    最后的式子:a=(a++)+(++a); 相当于: a=t1+t2;   即: a=9+11;
    故: a的值是: 20  
      

  9.   

    在JAVA中,
    int a = 9; 
    a=(a++)+(++a); //不知道以后是否会见到这道题作面试题
    问:a=? 答:第一个(a++)相当于: 
    int t1; //t1值当作是(a++)表达式的值 
    t1=a;   //t1=9 
    a=a+1;  //a=10 先给这个“表达式”赋值,再加一 而且还在内存中留着临时变量a 直到本条语句结束
    return t1;
    第二个(++a)相当于: 
    int t2; //t2值当作是(++a)表达式的值 
    a=a+1;  //a=11 先加一,再给这个“表达式”赋值,而且还在内存中留着临时变量a~
    t2=a;   //t2=11 
    return t2;
    最后的式子:a=(a++)+(++a); 相当于: a=t1+t2;  即: a=9+11; 故: a的值是: 20 ---------------------------------------
    这种记忆java中的(a++)(++a)比较方便。a = 9; 
    a=true?a++:(a++)+(++a); //a=a++;
    System.out.println(a);  //输出 a得9