i++与++i陷阱

Posted 静若飘絮

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了i++与++i陷阱相关的知识,希望对你有一定的参考价值。

对于++i与i++编程必不可少,它们的区别:一般人只知道++i是先将i加一再进行其他操作,i++是先将i进行其他操作,再将其加一。

但是对于i++其中的执行过程,语言环境很关键。先来两个程序,看结果是否是认为的结果:

1、Java环境下

public class JiaJia {
public static void main(String[] arg){
    int count1=0,count2=0;
    for(int i=0;i<10;++i)
        {
          count1=count1++;
          count2=++count2;
        }
    System.out.println("count1="+count1);
    System.out.println("count2="+count2);
}
}

结果 

2、C++环境下

#include<stdio.h>
#include<string.h>
using namespace std;
int main(){
int count1=0,count2=0;
for(int i=0;i<10;++i)
{
count1=count1++;
count2=++count2;
}
printf("count1=%d\\n,count2=%d",count1,count2);
}

结果:

3、结果分析

C++环境下是我们认为的结果,而Java环境下为什么不是我们认为的结果?

在Java环境下,对于count=count++,处理过程是:首先把count的值(注意是值,不是引用)拷贝到一个临时变量区,然后对count加一,最后返回临时变量区的值。

 

以上是关于i++与++i陷阱的主要内容,如果未能解决你的问题,请参考以下文章

题解luogu p1156 垃圾陷阱

go协程使用陷阱(转)

C中的中止陷阱6错误

编写高质量代码改善C#程序的157个建议——建议38:小心闭包中的陷阱

ES7 Async/Await 陷阱

Python中for循环搭配else的陷阱