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


    原文:https://blog.csdn.net/c15158032319/article/details/78209740

    记得刚开始学编程的时候还是从c语言开始的,还是看的谭浩强写的那本书,上面对介绍i++和++i的区别如下:
    i++是先赋值,然后再自增;++i是先自增,后赋值。
    用代码表示就是:
    若 a = i++; 则等价于 a=i;i=i+1;
    而 a = ++i; 则等价于 i=i+1;a=i;

    那么事实真是这样么,只是曾经我深信不疑,但是直到我看到下面这段代码:
     

    @Test
      public void test(){
          int i = 0;
          i=i++;
          System.out.println(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直接得到计算后的值。
  • 相关阅读:
    C语言点滴
    随便记点什么
    STL的使用
    Linux下OTG支持USB摄像头
    socket编程实战-调试
    socket编程实战-bind端口占用问题
    socket编程实战-tcp_tw_recycle问题
    socket编程实战-connect超时问题
    BT[3]-BLE广播详解
    BT[2]-BLE初体验:心率计
  • 原文地址:https://www.cnblogs.com/shihaiming/p/11407264.html
Copyright © 2020-2023  润新知