zoukankan      html  css  js  c++  java
  • i++和++i的区别


    转载自: 皮小智  https://blog.csdn.net/github_37847975/article/details/77369851 

    转载自:   https://blog.csdn.net/c15158032319/article/details/78209740

    ——————————————————————————————————————————————————

    i++是先赋值,然后再自增;

    ++i是先自增,然后再赋值。 

    1- 在i++和++i需要用来赋值的时候,有差别。

    例子1:用代码表示就是: 

    若 a = i++; 则等价于 a=i; i=i+1; 
    而 a = ++; 则等价于 i=i+1; a=i;

    例子2:更特殊的例子:

    @Test public void test()
    { 
        int i = 0; 
        i=i++; 
        System.out.println(i); 
    }

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

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

    所以,红色的i拿到的是绿色的i未赋值之前的副本,也就是0.

    2-在for循环中,没有差别

    for(int i = 0; i<10; i++) { System.out.println(i); }

    for(int i = 0; i<10; ++i) { System.out.println(i); }

    结论:i++ 和 ++i 的作用是一样的。运行时间有差别。Java中i++语句是需要一个临时变量取存储返回自增前的值,而++i不需要。这样就导致使用i++时系统需要先申请一段内存空间,然后将值赛如进去,最后不用了才去释放。多了这么一系列操作时间当然多了。

    -------------------------------------------------------

    3.细节

    因为我是做Android的嘛,平时在使用for循环时,都是这样写的:for(int i=0; i<10; i++),用的 i++。然而今天看算法的时候,发现有的for循环是这样的:for(int i=0; i<10; ++i),用的 ++i。

    刚刚看到的时候就在想在for循环中 i++ 和 ++i 有什么区别呢?

    越想心里越闹不停,没心思往下看了,只好自己取查查资料,再用实例尝试了一下,发现它们在for循环里面效果是一模一样的!

    首先我们应该都知道++i与i++的区别是: ++i 是先执行 i=i+1 再使用 i 的值,而 i++ 是先使用 i 的值再执行 i=i+1;

    然后我们也知道for循环的执行顺序如下:

    for(A;B;C)
    {
    D;
    }
    1
    2
    3
    4
    进入循环执行A;//只是进入的时候执行.
    执行B;//条件为真才执行D,不然就跳出for了.
    执行D;
    执行C;
    再回到第2步开始执行
    那么我们接着看下面实例:

    1.for (int i=0; i<10; i++):

    for(int i = 0; i<10; i++) {
    System.out.println(i);
    }
    1
    2
    3
    相当于:

    for(int i=0; i<10;)
    {
    System.out.println(i);
    i++;
    }
    1
    2
    3
    4
    5
    2.for (int i=0; i<10; ++i):

    for(int i = 0; i<10; ++i) {
    System.out.println(i);
    }
    1
    2
    3
    4
    相当于:

    for(int i=0; i<10;)
    {
    System.out.println(i);
    ++i;
    }
    1
    2
    3
    4
    5
    在上述的循环体中,i++ 和 ++i 的作用是一样的。

    打印出来的信息都是:

    0
    1
    2
    3
    4
    5
    6
    7
    8
    9

    打印信息也证明了 i++ 和 ++i 的作用是一样的。

    然而到这步我们也只是知道了作用效果是一样,但是他们肯定是有一定区别的。

    所以我去把循环耗时也打印了出来,
    循环次数=100的时候:,

    循环次数=1000的时候:,

    循环次数=10000的时候:,

    相信大家也看出来区别了,没错,就是运行时间有差别,当循环此时较少没多少出入,但是当我们循环的次数上去了那么这差距就有点明显了。然后仔细探考后发现:在Java中i++语句是需要一个临时变量取存储返回自增前的值,而++i不需要。这样就导致使用i++时系统需要先申请一段内存空间,然后将值赛如进去,最后不用了才去释放。多了这么一系列操作时间当然多了啊,最后建议大家以后在写for循环且不影响逻辑的情况下多使用++i,少使用i++,这也算一定程度的系统优化不是( ̄▽ ̄)”。本片文章到此结束,谢谢大家观看!
    ---------------------
    作者:皮小智
    来源:CSDN
    原文:https://blog.csdn.net/github_37847975/article/details/77369851
    版权声明:本文为博主原创文章,转载请附上博文链接!

  • 相关阅读:
    J2EE中常用的名词解释
    java中的构造方法
    String s = new String("xyz");创建了几个StringObject?
    MySQL 学习笔记
    《SQL 必知必会》建表语句
    《SQL 必知必会》读书笔记
    IDEA 中项目代码修改后不自动生效,需要执行 mvn clean install 才生效
    curl 使用指南
    MySQL字段添加注释,但不改变字段的类型
    《痞子衡嵌入式半月刊》 第 14 期
  • 原文地址:https://www.cnblogs.com/frankcui/p/10412718.html
Copyright © 2011-2022 走看看