当然是0,0,0了
形式参数无法改变实在参数的值,因为java参数是传值的。
i=i++;
i++是等于i,然后再使i的值加一。
i=i++;相当于以下三句;
j=i;
i=i+1;
i=j;

解决方案 »

  1.   

    函数fermin的int是传值,而不是传引用
      

  2.   

    我的建议是,最好不要使用++这种东西自找麻烦,
    首先是代码可阅读性差,把自己绕进去
    其次,++的值改变有一定次序问题,这个可能具体平台还有些差别
    所以,研究一下可以,但是不要乐此不疲。在实际使用中,除了一些很明显的使用之外,应该尽量避免传递基本类型的参数时,编译器将参数的值传递到方法中。如果在方法修改传递过来的参数的值,并不会影响原参数的值。
    所以你的第二个输出还是0
    至于第三个,需要分析一下这个表达式i=i++;
    其实它等于(i=i)++; 结果i=0
    如果你只是让i自加1直接用i++;就可以了
      

  3.   

    i=i++;相当于以下三句;
    j=i;
    i=i+1;
    i=j;
    -----------------------------------
    还是不懂
      

  4.   

    to  chanceqw :至于第三个,需要分析一下这个表达式i=i++;
    其实它等于(i=i)++; 结果i=0
    如果你只是让i自加1直接用i++;就可以了
    -------------------------
    这个解释好象并不合适;(i=i)++   这样的表达式也是非法的 ;那个++ 到底跑哪里去了?谁知道?
      

  5.   

    这里解释一下i=i++
    ++做后缀时其操作是先求值再自加1
    所以i=i++就是先将i赋给左值,然后再自加,但是自加时已经不是自加到i上了
    因为i已经由等式左值确定了,所以自加的是一个临时的变量,这个值不会保存
      

  6.   

    我认为i=i++等价于下面几个式子
    j=i; //等式右值赋给一个变量
    i=j; //求值
    j++; //自加不过这有点钻牛角尖了
      

  7.   

    i=i++
    你可以去看看编译以后的字节码
    用javap看看它是怎么个执行顺序
    在这里jvm里面有两个存储区,一个是暂存区(是一个堆栈,以下称为堆栈),另一个是变量区。
    语句istore_1是将堆栈中的值弹出存入相应的变量区(赋值);语句iload_1是将变量区中的值暂存如堆栈中。
    因为i = i++;是先将i的值(0)存入堆栈,然后对变量区中的i自加1,这时i的值的确是1,但是随后的istore_1又将堆栈的值(0)弹出赋给变量区的i,所以最后i = 0。
      

  8.   

    回复人: chanceqw(★★★★★) ( ) 信誉:100  2004-11-19 08:38:00  得分: 0  
    ++做后缀时其操作是先求值再自加1
    所以i=i++就是先将i赋给左值,然后再自加,但是自加时已经不是自加到i上了
    因为i已经由等式左值确定了,所以自加的是一个临时的变量,这个值不会保存
    -----------------------------------似乎确实如此
    i=i++;   大致相当于以下三句;
    temp=i;
    i ++;
    i=temp;
      

  9.   

    关于 i=i++
    可看一下这个
    http://www.zdnet.com.cn/developer/code/story/0,2000081534,39213850,00.htm
      

  10.   

    tom2005(快乐着)
    very good!thanks!
      

  11.   

    public class Ab { 
    public static void main(String argv[]) { 
    Ab ab = new Ab(); 
    int i =0; 
    System.out.println("label1: "+i);
    ab.fermin(i); 
    //System.out.println("label2: "+i);
    i = i++; 
    //System.out.println("label3: "+i);

    void fermin(int i) { 
    i++;
                      System.out.printl("label:"+i); 


    如你所愿