public class Test16 {
    static void fermin(int i){
        i++;
    }
    public static void main(String args[]){
        Test16 t=new Test16();
        int i=0;
        t.fermin(i);
        i=i++;
        System.out.println(i);
        
    }
}
结果为什么不是2,而是0呢?

解决方案 »

  1.   

    i++ 和 ++i在运算顺序上是不一样的
    就像你上面的 System.out.println(i);
    程序会先打印i,再运算++
    如果把上面的i++都改成++i
    就会先运算++,再打印i了
    结果就变成2了
      

  2.   

    首先fermin的i++不影响main的i,因为两个方法的i是不同的变量
    所以
    int i=0;
    t.fermin(i); //此时i还是0,因为fermin的i++不影响main的i
    i=i++;//这里要知道执行的先后顺序,i++是先取得i的值作为表达式的值,然后i本身+1,
           //=是把右边的表达式值赋给左边
           //所以右边i++的值就是先取i的值0作为表达式的值,然后i本身+1,此时i为1
          //然后=把右边的表达式的值0赋给左边,所以此时i又变成了0
      

  3.   

    真是好题 还想说几句  就是i=i++;这条语句是先执行i++ 执行结果就是i变成啦1  再执行=赋值语句 右边
    i++值等于0  赋值给左边 这样i=1的语句又被改啦  改成i=0; 相当于i又被重新赋值啦!!!
      

  4.   

    谢谢你们!我知道i++与++i 的问题,我就是不明白这一点:为什么fermin的i++不影响main的i,以及怎样才能让它影响呢?
      

  5.   

    一、fermin方法不会改变main方法里的i的值,因为你在t.fermin(i)这里把i=0传过去fermin方法的时候,已经是复制了一个i对象了,fermin里面的i++改变的是i的复制而不是i本身。所以在t.fermin(i)这句之后 i仍然是0。
    二、程序运行到i=i++这里,i仍然是0(如上一步所说)
    这里可以理解为:
    i  = i;// i =0;
    println(i);
    i=1;//先打印,然后i再变成一
      

  6.   

    如果要打印2public class TestDemo
    {
        static int add(int i)
        {
            return ++i;
        }
        
        public static void main(String[] args)
        {
            int i = 0;
            TestDemo testDemo = new TestDemo();
            i = testDemo.add(i);
            i = ++i;
            System.out.println(i);
        }
    }