i = i++;
就是
i=i;
i++;

解决方案 »

  1.   

    基本同意日月的解释
    i=i++后,i还是等于0,所以后来输出的是0,而i的自加丢失了
      

  2.   

    sorry,我觉得刚才自己的解释很牵强,因为按日月的解释,原程序应该是:
    int i = 0;
    i = i;
    i++;
    System.out.println(i);
    结果应该是1才对呀。会不会是应为jdk的原因?
      

  3.   

    i=i++后,i还是等于0,所以后来输出的是0,而i的自加丢失了
    这个解释应该是最好的,我自己认为
      

  4.   

    一楼没仔细看问题,还有跟一楼看法一致的兄弟,
    个人认为i++这个过程是在寄存器中进行的,
    i=i++;先赋值,然后i(寄存器中的i)自加(在寄存器中进行),接下去没有对寄存器中的i做任何操作,就释放掉i。System.out.printl(i)此处的i是内存中的i,因为在赋值的时候i被赋值为0,所以结果为0。个人愚见!
      

  5.   

    i=i++; 的含义表面上是
      i=i;
      i++;
    但这两个操作有可能在不同的地方进行,最后以哪个为准?我觉得“i=i++”是一个整体的表达式,它最终的值是由等号左边的值来定的。
    设i的存储单元为D。开始的时候,在内存中开辟一个临时存储单元E,用于存放等号左边的值,接着执行“i=i”,这时E中的值是0,接着执行“i++”(这个操作不同于加法,而是寄存器中进行的,再送回D),D中的值变为1,最后结束的时候,把E中的值送到D,释放E。所以最终i的值是0。再比如i=i+j+k。肯定要事先开辟临时存储单元E来存放最终的值,然后把i、j、k的值不断加进去,然后把E中的值送到i的存储单元D。
    这样就好理解以下代码的输出为6,而不是2
      int i=1;  
      int j=2;  
      int k=3;
      i= (i++)+j+k;
     System.out.println(i);
      

  6.   

    i=i++先取出i的值0赋给变量i,然后将i+1后的值1放在寄存器中,所以结果是0。
    i++是将i+1后的值1存进了变量i中,所以结果是1。
      

  7.   

    同意这种寄存器的说话,我在tc里试过,是1,在vc里也是1
      

  8.   

    跟寄存器有关,但不是寄存器的问题,因为所有的计算都要通过寄存器。
    原因是任何表达式的计算都要开辟临时存储单元,等号右端不管多么简单,都当表达式处理。
     当执行i=i++的时候首先把i送入临时存储单元,然后i增值1,接着把临时存储单元的内容送入i。所以i不变
      

  9.   

    http://community.csdn.net/Expert/topic/3674/3674362.xml?temp=.5590784
      

  10.   

    还在讨论啊,其实很清楚了
    执行过程是:
    1 把等号右端当表达式,分配一个临时的存储单元E 
    2 把i送入E(这个i是右端的i,而不是左端的i)
    3 i增值1 
    4 右端表达式计算完毕 
    5 把E中的值赋给i
      

  11.   

    有些人把这个简单的问题看的太简单的,还是像 thomas_20(执子之手,与子偕老) 等兄弟进入寄存器的说法有一定道理
      

  12.   

    问题中用的都是i++,而有些一直在谈什么 i++和++i的区别,真是莫名其妙!
      

  13.   

    thomas_20(执子之手,与子偕老) 
    cxz7531(大花猫) 
    现在认为只有以上两位说得最有道理和清楚,也符合问题要求!!
      

  14.   

    大概是这个过程
    1
     (register) t = i;
    2
     i = i + 1; 
     此时i变为1
    3
     i = t
    同意者举手支持!:)
      

  15.   

    int i=0
    i++i得1有什么错吗??int i =0 
    super.i = i
    i++
    super.i得0有问题吗??
    你用一个可以反回main方法 的函数本身就是错误
    JDK 应该报错
    会产生歧义的程序还是不要写的
    在main方法里也不要用基本变量
    也不要用i=i++这样的东西
    用i+=i会好一点点
      

  16.   

    "隐式的双main方法"
    能否详细解释一下,谢了.
      

  17.   

    最简单的你记住就是
    i=i++先赋值再运算
    i=++i是先运算再赋值