程序1 
public static void main(String[] args) { 
int i=0; 
i=i++; 
System.out.println(i); 
} 这个程序输出的是0。 程序2 
public static void main(String[] args) { 
int i=0; 
i=i++ + ++i; 
System.out.println(i); 

这个程序输出的是2. 这两个程序为何会得出这样的结果。JAVA中自增操作符执行的时机是怎样的。为何程序1中的赋值语句会使i变成0 

解决方案 »

  1.   

    http://blog.csdn.net/ZangXT/archive/2008/11/05/3229281.aspx
      

  2.   

    int i=0;
    (i++)的值是0
    而(++i)的值是1
      

  3.   

    public static void main(String[] args) { 
    int i=0; 
    i=i++ + ++i; 
    System.out.println(i); 

    i=i++ + ++i;这个式子我给你一点一点变下
    i=(i++) + (++i);
    i=(0++) + (++1);
    i=(0)+(++1);
    i=(0)+(2);
    i=2;
    这样看能明白没
    你第一个括号里 在i参与运算后已经+1变成了1,所以在第2个括号里是先要自增一在运算也就是1+1后再参与运算
      

  4.   

       程序1,i=i++; 会先使用i ,再自增,所以结果为0.
       程序2,那样的写法最好不要用,不同环境下会有不同的结果的,没什么意义。要清楚的话分开来写,反正我不会那样写,给自己找麻烦,呵呵。
      

  5.   

    i++ 是先取i的值,再自加
    ++i是自加再取i的值
      

  6.   

    i=0;
    i=i++;即是将表达式(i++)的值赋给i,i++的值为0,进行此操作后,i的值为1
    而i=i++ + ++i 先(i++)的值为0,但是i的值变为1,接着 ++i, 前缀是现将i加1,在将值赋给表达式,即(++i)为2,即i=0+2; 故答案为2
      

  7.   

    这个其实很简单啊,理解明白变量和表达式example:
    int a = 0;
    int i = 1;
    a = i++  ;其中i++ 是一表达式相当于i = i+1,如果你取的是表达式的值,
    那就是i+1;如果你要用的是变量i那,就是i的原值
      

  8.   

    运行下两个程序你就知道了
    int i=0;
    System.out.println(i/1 + i++);和int i=0;
    System.out.println(i++ + i/1);
      

  9.   

    楼主可以了解一下++i与i++的本质
    ++i 相当于 i = i + 1;return i;
    i++ 相当于 temp = i; i = i + 1;return temp;
      

  10.   

    一楼的链接解释的很清楚了。++i,先+1后赋值,而i++后先赋值后+1.
    应该引用第三方,把 i=i++; 理解成 int k = i++; i = k 这样你就非常容易理解了。