C#中的i++和++i

 

刚刚学习C#的时候,难免会遇到一些麻烦,而我觉得最有意思的是i++和++i。先介绍下它们吧!!

i++ 俗称后加加:在处理运算的时候先不做运算,等输出的时候再加,这是我个人的理解。++i 俗称先加加

:在处理运算的时候先加。

然后做相应的运算下面来看几个例子:

 

(1)

 

int i = 1;
i++;
Console.WriteLine(i);

 

 

 

 

 

最后结果:2

 

(2)

 

int i = 1;
++i;
Console.WriteLine(i);


结果:2

 

结论:从(1)(2)看出不管是i++还是++i输出最后的结果都是经过计算的。

(3)

 

int i = 1,j = 2,sum;
sum = j + i++;
Console.WriteLine(i);
Console.WriteLine(sum);

 

 

 

 

 

结果:2 3

(4)

 

int i = 1,j = 2,sum;
sum = j + ++i;
Console.WriteLine(i);
Console.WriteLine(sum);

结果:24
结论:i++在运算的时候先不做计算,等运算结束后在做加计算。++i在运算的时候就已经做了加计算。

 

 

是不是瞬间明白了,接下来是最经典的部分了:(i++)+(i++)、(i++)+(++i)、(++i)+(++i)

(5)

 

int i = 1, j = 1;
j = (i++) + (i++);
Console.WriteLine(i);
Console.WriteLine(j);

结果:33

 

(6)

 

int i = 1, j = 1;
j = (i++) + (++i);
Console.WriteLine(i);
Console.WriteLine(j);

结果:34

 

(7)

 

int i = 1, j = 1;
j = (++i) + (++i);
Console.WriteLine(i);
Console.WriteLine(j);

结果:35

 

结论:上面这三个例子更明显的看出,加加在前和加加在后的区别!(PS:当然有新手看不明白,

没关系。首先是两个括号,括号的运算级别比加号高,所以先算括号里面的。加号运算符的执

行顺序是从左到右。所以执行顺序是:( 1 )+( 2 ),+号是最后运算的。拿第一个举例吧,

j=(i++)+(i++) ,第一个(i++)加加在后,先不做运算,所以i=1,结束第一个后,到了第二个(i++)

的时候i已经做出了计算i=2(ps:因为上一个的i++不做计算,执行完了那个运算再做计算),

第二个(i++),此时的i同样不做计算,i=2,然后计算加法j=1+2,此时的i=3,输出结果:i=3,j=3)。

执行效率:

i++在执行的时候会在内存中复制一个副本执行+,实际i的值在执行的时候是没有执行+的,等到该语句执行完,再把这个++执行结果赋值给这个i,然后在内存中回收这个副本。

++i是直接执行这个++,不会有内存复制的开销

测试:

static void Main(string[] args)
{
    Stopwatch sw1 = new Stopwatch();
    sw1.Start();
    int i1 = 0;
    while (i1 < 1000000000)
    {
        i1++;
    }
    sw1.Stop();
    TimeSpan ts1 = sw1.Elapsed;
    Console.WriteLine("i++总共花费" + ts1.TotalMilliseconds + "ms.");


    Stopwatch sw2 = new Stopwatch();
    sw2.Start();
    int i2 = 0;
    while (i2 < 1000000000)
    {
        ++i2;
    }
    sw2.Stop();
    TimeSpan ts2 = sw2.Elapsed;
    Console.WriteLine("++i总共花费" + ts2.TotalMilliseconds + "ms.");
    Console.Read();
}
i++总共花费2677.6881ms.
++i总共花费2520.9784ms.

总结:我相信看完这么写经典的例子后,入坑的同学已经有了一定的理解。在实际情况中,

不同的编译器不同的语言中,后面三个例子的最后结果是不相同的,所以,在实际开发

中避免这种现象出现!

注:i--和--i原理一样


 

  • 8
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值