public class Inc{
public static void main(String argv[]){
                Inc inc = new Inc();
                int i =0; 
                inc.fermin(i);
                i = i++;
                i=i++;                System.out.println(i);
        }
        void fermin(int i){
                i++;
        }
}结果还是0,在main中无论加多少条i=i++;结果都是一样,为什么????????

解决方案 »

  1.   

    i=i++;在C++中结果应该是1,但在java中由运算符优先级和结合性决定,编译器的处理过程遇到i++,会新分配一个内存空间,保存i的原始值,而原i变量自增后.又用保存的i的原始值去重新赋值给变量i,覆盖了变量i自增的结果.为什么要这样的改变c++对自增的处理,纳闷....
      

  2.   


    inc.fermin(i); //这里对i无影响,看看调用就知道
    i = i++;  //这里i++虽然i自加了,但是i后来又被复制回去了
     i=i++;   //即i还是原来的 i
      

  3.   

    1. int不是对象,不会通过reference改变
    2. i++指,先显示后计算,所以i = i++,也就等于i = i
    把代码改成这样
    public static void main(String argv[]){
      Inc inc = new Inc();
      int i =0; 
      i = inc.fermin(i);
      System.out.println(i);
    }void fermin(int i){
      i++;
    }
    或是
    public static void main(String argv[]){
      int i =0; 
      i++;
      System.out.println(i);
    }
      

  4.   

    你犯了两个错误。
    第一,变量生存期。
    void fermin(int i){
                    i++;
            }
    这里的自增只是对于方法参数i的自增。
    第二,自增运算符的使用
    i=i++;
    这句意思是把i的值先赋值给i,再对i自增1。
    但是,自增运算符的优先级比赋值高。所以再赋值时i其实已经加了1。再将i赋值成0。这样无论加多少条i=i++;结果都是一样的。
    如果改成i++;或i=++i;就能够实现自增了。
    其实这个用单步调试,很容易就解决了。
      

  5.   

    那想让i自增的话不是只能用++i了?还要i++的语法有什么用啊
      

  6.   

    i++是先参与表达式的计算,然后自增
    ++i是先自增,后参与表达式计算,
    比如: i=1,j=2
    k=(++i)+j;//结果是k=4,i=2
    k=(i++)+j;//结果是k=3,i=2
      

  7.   

    main()方法中的i是局部变量,而fermin()方法中的i也只是局部变量,这两个i只能分别作用于他们各自的方法体内;main()方法是类方法,它可以直接调用类中的类成员变量,即用static修饰的变量。
    程序应该为:
    public class Inc
    {
        public static void main(String argv[])
        {
           Inc inc = new Inc();
           int i =0; 
           i = inc.fermin(i);
           System.out.println(i);
        }    int fermin(int i)
        {
           i++;
           return i;
        }
    }
      

  8.   

    i=j++我懂,不用说了,这和i=i++是完全不一样的