i++是在执行后i=i+1
所以fermin(0)=0
i=i++=0
所以结果0是正确的

解决方案 »

  1.   

    很简单啊。 因为java函数调用是传的值参,你调用fermin不会对main里面的i产生任何影响。而你调用i=i++;是先返回再加,就是说,你i++产生的结果是0,赋值给了i。所以i是0, 但是你如果调用i++,那么i就会加1,虽然这个表达式返回的结果是0。
      

  2.   

    首先inc.fermin(i);这句并不能改变i的值,因为参数传的是值而非地址
    i的值究竟是多少,这是++运算符的问题
    i = i++;可以分解成这样:
    int j=i++;
    i=j;
    如果你明白++运算符作为前置和后置有什么区别的话,那你就知道为什么结果是零了
    如果不明白,建议找本书看看,ok?
    i++;可以理解为:i=i+1;
      

  3.   

    i=i++;会产生类似如下的字节码:
    iload_1
    iinc    1, 1
    istore_1
    所以i还是原来的值
      

  4.   

    还是不大明白,大家不用讨论fermin(),这个我知道。i = i++;是先赋值,后相加。那么在这个过程中i先被赋0,然后i自相加,产生1,但这个1没有给i, 那么请问这个产生的1到哪里去了?dugang106(冷风细雨) 说单独的i++可以理解为i+=1;就是说自加的结果还是应该给i的,这一点从把句子改成"i++;"再println也可以看出来。但这样解释的话与上面不是矛盾吗?进一步这个例子,如果改成循环做:
    for(int j=0;j<10;j++) i++;
    然后println,那么i的值在执行10次循环后依然不会变,还是0.
    更进一步就是说如果我们把循环改成for(int j=0;j<10;j=j++) 那么这将是一个死循环!请问i=i++和i++的关系应如何解释才能自原其说呢?