在牛客网做题遇见了这道题,又勾起了我对i++和++i的无限怨念,所以今天要搞懂它

 @Test  public void test(){      int i = 0;      i=i++;      System.out.println(i); //输出结果为0  }

原先的理解为:

i++是先赋值,然后再自增;++i是先自增,后赋值。用代码表示就是:若 a = i++; 则等价于 a=i;i=i+1;而 a = ++i; 则等价于 i=i+1;a=i;

但是牛客网的题打破了我的幻想, 如果按原先定义,就应该是i=i;i=i+1; 那么结果就应该是1;但是很遗憾结果是0;所以得知原先定义有误,至少是不准确的。 这个是为什么呢?

我简单用代码模拟如下真实流程:

   int i;   @Test   public void testAddI() {       i = 0;       i = lastAdd();       System.out.println(i);       i = 0;       i = firstAdd();       System.out.println(i);   }   //模拟i++的机制   public int lastAdd() {       //操作i前对其值保留副本       int temp = i;       i = i + 1;       //返回副本       return temp;   }   //模拟++i的机制   public int firstAdd() {       i = i + 1;       return i;   }

输出结果为0和1,和i=i++以及i=++i的结果一致。

结论:在java的执行过程中,i++和++i都直接对i进行了i=i+1的操作,但是不同的是i++得到的是i未进行加法操作的前的值的副本,而++i直接得到计算后的值