int a = 5;
a = a--;
System.out.println(a);
 为什么输出是5?a--为什么不执行了?
 如果改成这样:
                int a = 5;
int b = a--;
System.out.println(a);
 输出就是4.就执行了a--。请问这是为什么呢?
  

解决方案 »

  1.   

    这是一个左++以及右++的问题、int a = 5;
    a = a--会先把进行运算 a = a 赋值、再进行运算--如果是a = ++a 则会先执行++ 在执行赋值
    比如: int a = 0 ,b=0,c=1;然后 a = c++;  b= ++c;输出结果 a = 1 , b=2、简说就是先执行离=进的东西
      

  2.   


    按照这样的话,不是应该先执行a = a,这时a是5。然后执行a--,a不就成4了?为什么输出会是5?
      

  3.   

    a--是个表达式,这个表达式是让a减一,然后返回a原来的值,然后这个值赋给了a,所以a是变成4然后又变成了5.
      

  4.   


    a--只是个表达式、a = a 是5  然后输出5  只有你做下一种调用或者方法的时候 才能感觉到--的存在
      

  5.   


    a--不是应该先操作,后--么?不是应该先把a赋值为5,在--为4的么?而且我用debug单步运行发现a的值始终都是5,没变化过难道a--就根本没有执行???
      

  6.   


    我试了,代码如下:                int a = 5;
    a = a--;
    System.out.println(a);
    int b = a+1; //我在这里调用了a,并让a+1赋值给b,然后输出b的结果是5,a并没用执行--啊
    System.out.println(b);
      

  7.   

    对的,a-- 是先把值赋给a,执行运算之后再执行--操作的;
    相反的,--a  是  先进行 -- 操作运算 然后再进行  其他运算
    看下2楼的过程,正解
      

  8.   


    我想问的是为什么int b = a--的时候a--就执行了,而a = a--的时候a--就不执行
      

  9.   


    a = a--  赋值完之后 a--就失效了、、、---                int a = 5;
    a = a--;
    System.out.println(a--);
    System.out.println(a--+a);
    System.out.println(++a);
    你运行下这段代码看看结果就能明白了
      

  10.   


    这行语句点醒了我
    是不是说,a--+a中第一个a没有做--,保留了4的值,然后再“+”的时候先运行了a--,所以后面的a变成了3.那么a = a--就是后面的a先保留了5的值,然后再“=”的时候做了a--,a变为4,然后在执行把刚才那个5赋值给a?
      

  11.   

    我觉得不是++--没执行的问题。你要把这个操作当成一个方法,程序块,就好理解了。
    a++对应于
    {
    int temp = a;
    a++;
    return temp;
    }
    ++a对应于
    {
    a++;
    return a;
    }
    int a = 5;a = a--;中a--的意义就是先确定返回值是a(5),然后计算--,a变为4,然后进行等号负值,a=5.我是这样理解的。
      

  12.   

    lz还是不对
    举例int a = 5;
    System.out.println(a--+a);
    System.out.println(++a);a--+a执行步骤是,先返回a--的值(5)同时--操作影响了a的值,a变成4,再计算+的时候是拿(a--)返回的值(5)与这时的a的值(4)进行加法运算,得到9
    并不是上面说了a--时候没进行--操作
      

  13.   

    http://hi.baidu.com/%C7%E5%C4%BE%B9%ED/blog/item/d53e07290e5136f5e6cd40ea.html在网上看到的一篇文章,应该解释的很清楚了。对于a=a++这类的赋值,和编译器的实现是很有关系的。