• i++ 和 ++i 探究原理


    先看一个例子:

    package com.test;
    
    public class AutoIncrement {
    
    public static void main(String[] args) {
      int a=7;
      System.out.println(++a);
      System.out.println(a);
      int b=7;
      System.out.println(b++);
      System.out.println(b);
    }
    }

    结果也如预期的一样:

    是不是回忆起大学老师讲的规则:自增有两种方式,分别是i++和++i;i++表示先赋值后加1;++i表示先加1再赋值;

    那还有啥好讲的?(**上面的规则是片面的**)

    那下来咱们看一个例子:

    package com.test;
    
    public class AutoIncrement {
        public static void main(String[] args) {
            int c = 0;
            for(int i=0;i<10;i++){
                c = c++;
            }
            System.out.println(c);
        }
    }

    最后结果是多少?答案等于10?我可以肯定的告诉你错了,答案是0,这是为什么?

    下面咱们讲一下Java是怎么样处理自增的:
    i++ 和 ++i原理

    i++ 即后加加,原理是:先自增,然后返回自增之前的值

    ++i 即前加加,原理是:先自增,然后返回自增后的值

    重点:这是一般人所不知道的,记住:不论是前++还是后++,都有个共同点是先自增

    1) ++i 原理,等价于

        i = i+1;
        return i;
    2) i++ 原理,用代码分析表示如下:
        int temp = i;
        i = i + 1;
        return temp;
        这3句代表就是上面所说的那样:i++是先自增,然后返回自增之前的值;

    PS:不同语言对自增的处理不太一样: 在C++中,“count=count++”与“count++”等价;在Java,PHP中处理方式如上述解析;不同语言,自己可以测试一下

    PS:关于执行效率的认识:

    i++:取出i,复制i,增加i,返回副本;
    ++i:取出i,增加i,返回i;
    i++要增加一个副本,无疑是要多耗内存,当然效率要低一点,当然只是一丢丢罢了,根本不会对程序运行有明显的影响。

    我看过一篇博客,作者的主旨是两者的效率一样,地址 http://www.cnblogs.com/anrainie/p/6610379.html

    表示有距离感0.0,个人认为JVM也在不断优化,具体有待研究...

    转载:https://www.cnblogs.com/JsonShare/p/6994776.html

  • 相关阅读:
    Word和WPS插件开发总结
    WPS报表导出插件
    基于FFmpeg的教学资源库的非MP4视频转换为MP4流程
    Node-WebKit推送信息调研
    (译)OpenID Connect的常见问题与答案(二)
    (译)欢迎来到OpenID Connect(一)
    Xxl-job的使用
    ELK+filebeat安装部署监控springboot日志
    分布式事物
    Prometheus监控Centos,Mysql,Docker
  • 原文地址:https://www.cnblogs.com/wwct/p/12825876.html
Copyright © 2020-2023  润新知