int a = 1;
  a = a ++;
  System.out.println(a);为什么输出的结果还是1  而不是2呢 请高人解答

解决方案 »

  1.   

    还是请 xiaolaba222 解答一下吧 谢谢
      

  2.   

    a++是执行完a=a才进行加运算,你没有循环当然还是1
      

  3.   

    你这好像也说得有问题吧?执行完a=a,再执行a++的话,最后输出应该是2我觉得是这样,右边先执行a++,此时右边a=1,左边a=2了,完后执行赋值操作,右边的1再赋给左边的a,所以结果就是1了,相当于先执行了a=2,再执行a=1
      

  4.   

    i++相当于:
    temp=i; i=temp+1;
    return temp;
      

  5.   

    除了“gesanri”大家好像都没有明白我的意思
     int a = 1; 
      a = a ++; 
      System.out.println(a); 执行上面代码 控制台输出a的值是 1     而按照正常的理解a的值应该是2
    请解释原理
      

  6.   


    你的代码其实相当于如下代码:
    int a=1;
    a=a++;等价于:
    int t;
    t=a;//先将a的值暂存
    a=a+1;//然后a的值加1
    a=t;//最后用原先暂存的t来取代码a++
      

  7.   

    a=t;//最后用原先暂存的t来取代a++ 
      

  8.   

    a++  
    先得到a  然后给a+1++a
    先+1  再得到a
      

  9.   

    大家看好了啊,
    a=a++;    
    是把a++又赋值给a了   
    问a的值是多少 
      

  10.   

    你用int t = a++; 不就清楚了
      

  11.   

    a=a++;
    这个表达式拆开来看可以理解成:
    1.a=a
    2.a+1
    注意,上面的a赋值为a先执行,然后赋值完成后的表达式执行,但是此时2执行的a+1并没有再次被赋值给a,所以a的值还是为1.a=++a;
    这个语句其实是有语法错误的,因为该语句中对a的赋值无效.执行过程如下:
    1.a=a+1
    2.a=a
    在2中a=a其实是无效的,相当于只执行了a=a+1
      

  12.   

    9楼和11楼说得很对你不要把a=a++;理解为:
    先进行赋值,再把a的值++,
    那就错了。恰恰是先进行++运算,再进行赋值运算的
      

  13.   

    当a=++a时,报警告:The assignment to variable a has no effect
      

  14.   

    我们写读取流数据的时候,经常有:
    while((temp = io.readLine()) != null)
    temp = io.readLine()虽然是一个赋值语句,但它作为一个表达式也是有值的。而它的值就是表达式左边的值。同样,a++也是一个表达式,java规定这个表达式的值是a在进行运算之前的值。
    java还规定赋值语句是先计算右边的值,再赋值给左边。
    所以先执行了a++。
    执行完之后,再执行a=1[1就是a++这个表达式的值]。
      

  15.   


                      int a = 1; 
      a ++; 
      System.out.println(a); 
    或者这样:int a = 1; 
      a ++; 
      a = a++;
      System.out.println(a); 输出时2.
      

  16.   

    本人java菜鸟
    刚浏览了下一位老大的博客,第一篇就是
    http://blog.csdn.net/jFresH_MaN/archive/2005/03/27/332103.aspx楼主看看吧
      

  17.   

    呵呵 是Java中的运算栈进出和C不同点(也就是用出栈入栈来做赋值操作的不同)
    a=a++ Java先入栈 在做++ 在出栈给a 所以a仍是以前的值
    而C中 先a++ 在入栈 在出栈给a a就是++后的值了
      

  18.   

    int i =0;
    i = (i++) + (i++) + (i++);
    System.out.println(i);
    这个输出结果是3。但是不是因为i进行了3次++运算得到的,而是最后的赋值.i = (i++) + (i++) + (i++);相当于:i = 0 + 1 + 2 =3.仔细思考下吧。
      

  19.   

    int a = 1; 
      a = a ++;//先给a赋值为a,然后再做自加运算 
      System.out.println(a); 
      

  20.   

    突然发现:
    其实System.out.println(a++);与a=a++类似
    但System.out.println(a++)这不难理解
      

  21.   

    哈哈,听我给你解释下吧,情况是这样的,a++这个整体的值是1,a的值是2,他是将a++这个整体的值赋给了a,而不是将a这个变量的值赋给了a,当赋值完成后,a的值由2又变成变成了1,若是a=++a的话,++a这个整体是2,并且a得值也已经是2,故a的值是2.你明白不?快点加分