i++和++i的真正区别

àì夳堔傛蜴生んèń 2021-06-24 15:57 632阅读 0赞
  • 记得刚开始学编程的时候还是从c语言开始的,还是看的谭浩强写的那本书,上面对介绍i++和++i的区别如下:
    i++是先赋值,然后再自增;++i是先自增,后赋值。
    用代码表示就是:
    若 a = i++; 则等价于 a=i;i=i+1;
    而 a = ++i; 则等价于 i=i+1;a=i;
  • 那么事实真是这样么,只是曾经我深信不疑,但是直到我看到下面这段代码:

    @Test
    public void test(){

    1. int i = 0;
    2. i=i++;
    3. System.out.println(i);

    }

如果按原先定义,就应该是i=i;i=i+1; 那么结果就应该是1;但是很遗憾结果是0;所以得知原先定义有误,至少是不准确的。

  • 那么真实的机制是怎么样的呢?我简单用代码模拟如下真实流程:

    int i;

    @Test
    public void testAddI() {

    1. i = 0;
    2. i = lastAdd();
    3. System.out.println(i);
    4. i = 0;
    5. i = firstAdd();
    6. System.out.println(i);

    }

  1. //模拟i++的机制
  2. public int lastAdd() {
  3. //操作i前对其值保留副本
  4. int temp = i;
  5. i = i + 1;
  6. //返回副本
  7. return temp;
  8. }
  9. //模拟++i的机制
  10. public int firstAdd() {
  11. i = i + 1;
  12. return i;
  13. }

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

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

发表评论

表情:
评论列表 (有 0 条评论,632人围观)

还没有评论,来说两句吧...

相关阅读

    相关 i++ ++i 区别

    一、++i 就是 先把 i+1 后计算得到一个值,然后用这个值去进行其他运算,结束后 i 的值增加 1 ; 二、i++ 就是用 i 去进行 运算,运算结束后 i 的值也是

    相关 i++++i区别

    首先: 无论 i++ 还是 ++i,这两个都不是原子操作,详情看这里[ i++为什么不是原子操作][i] i++ : 先取i的值作为表达式的值,然后执行 i =