刚刚学习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原理一样