• i++ 和 ++i 的区别


    先说运算规则吧。

    i++ 是先赋值后自增;++i 是先自增后赋值。

    以下是代码示例:

    int a=0;
    int b=0;
    int i=0;
    
    a=i++;
    
    System.out.println("a的值为:"+a);
    System.out.println("i的值为:"+i);
    
    b=++i;
    
    System.out.println("b的值为:"+b);
    System.out.println("i的值为:"+i);

    运行结果为:

    a的值为:0
    i的值为:1
    b的值为:2
    i的值为:2

    i++是先赋值后自增,所以 a=i++ 可以分解为两步,先运算 a=i ;再运算 i=i+1;所以a的值为0,i 的值为1。

    ++i是先自增后赋值,所以 b=++i 可以分解为两步,先运算 i=i+1;再运算 b=i ;所以b的值为2,i 的值为2。

    再看一下比较绕的情况:

    public static void main(String[] args) {
    
            int a=0;
            int i=0;
    
            i=i++;
            i=i++;
            i=i++;
            i=i++;
            i=i++;
    
            System.out.println("i的值为:"+i);
    
            a=++a;
            a=++a;
            a=++a;
            a=++a;
            a=++a;
    
            System.out.println("a的值为:"+a);
    
        }

    你能准确的说出 i 和 a 的值吗?

    代码运行结果如下:

    i的值为:0
    a的值为:5

    是不是 i 的值很令人迷糊?

    a 的值很好解释,++a是先自增后赋值,所以 a = ++a 等价于 a=a+1 ; a=a ;运算后 a 的值为1,以此类推,最后 a 的值为5。

    但 i 的值就不符合我之前的计算了,i++ 是先赋值后运算,所以 i=i++ 可以拆分为 i=i;i=i+1;运算后,i 的值应该也为1,以此类推,最后 i 的值应该也为5才对,但最后的运算结果为0,这就很令我迷糊了。

    请看下面这种解释:

    初始 i 的值为0,i=i++ 时,i=0 这个值先进寄存器,然后 i 的值自增1,但在最后赋值的时候,寄存器中的值0会覆盖 i 新增后的值1成为最终结果,所以无论计算多少次,最后的结果都是为 0 。

    请看下面这个例子

    public static void main(String[] args) {
    
            int i=0;
            int a=0;
            i=i++ + ++i;   
            a=++a + a++; 
    
            System.out.println("i的值为:"+i);
            System.out.println("a的值为:"+a);
    
        }

    结果如下:

    i的值为:2
    a的值为:2

    计算过程请自己思考。

  • 相关阅读:
    Linux中profile、bashrc、bash_profile之间的区别和联系
    指针长度长几何
    快速理解网络协议视频总结
    gdb调试关键点记录
    调试经验积累
    定位网页元素
    浮动
    盒子模型
    css3
    css
  • 原文地址:https://www.cnblogs.com/hs2018/p/10136755.html
Copyright © 2020-2023  润新知