我相信写代码的人对i++和++i都不陌生,但你完全搞懂这两种写法了吗?下面说明一下他们的区别。简单地说,i++ 是先用再加,++i 是先加再用。
1 int i = 0; 2 int y = 1; 3 y = i++; 4 Console.WriteLine("y的值为:{0}", y.ToString()); 5 Console.WriteLine("i的值为:{0}", i.ToString());
上面的代码运行结果:
下面再看一段代码:
1 int i = 0; 2 Console.WriteLine("先引用,后运算,所以 i 还是{0}", (i++).ToString()); 3 Console.WriteLine("现在 i 在内存中的值为{0}", i.ToString()); 4 Console.WriteLine("先运算,后引用,所以 i 的值为{0}", (++i).ToString()); 5 Console.ReadLine();
这段代码运行结果:
我们在for循环中经常用到i++,那么在for循环中i++和++i有什么区别呢?继续看代码:
1 var count = 0; 2 for (int i = 1; i <= 10; i++) 3 { 4 count += 1; 5 } 6 Console.WriteLine("循环次数为:{0}", count.ToString()); 7 Console.ReadLine();
运行结果:
把for循环中的i++换成++i呢?看代码:
1 var count = 0; 2 for (int i = 1; i <= 10; ++i) 3 { 4 count +=1; 5 } 6 Console.WriteLine("循环次数为:{0}", count.ToString()); 7 Console.ReadLine();
运行结果:
可见对于for循环的循环次数来说,i++和++i的循环次数是一样的,但是从性能上来讲,二者有无区别呢?继续看代码:
1 Stopwatch sw = Stopwatch.StartNew(); 2 //string count = string.Empty; 3 4 //long ticks; 5 for (int i = 1; i <= 100; i++) 6 { 7 //count = i.ToString(); 8 } 9 sw.Stop(); 10 var elapsed = sw.Elapsed; 11 //Console.WriteLine("循环次数为:{0}", count.ToString()); 12 Console.WriteLine("耗时:{0}", elapsed.ToString()); 13 Console.ReadLine();
运行结果:
把i++换成++i,其他不变,运行结果如下:
for循环100次,循环中不做任何事情,从笔者的电脑上的运行结果上看,i++比++i好,现在把循环次数改为10000000(1000万)次,结果如何呢?
如果在for循环中加入某些事务逻辑呢?代码改为:
1 Stopwatch sw = Stopwatch.StartNew(); 2 string count = string.Empty; 3 4 //long ticks; 5 for (int i = 1; i <= 100; i++) 6 { 7 count = i.ToString(); 8 } 9 sw.Stop(); 10 var elapsed = sw.Elapsed; 11 Console.WriteLine("循环次数为:{0}", count.ToString()); 12 Console.WriteLine("耗时:{0}", elapsed.ToString()); 13 Console.ReadLine();
先测试循环次数为100的结果:
i++如下:
++i如下:
将循环次数改为1000万次:
i++如下:
++i如下:
从性能上来将,i++和++i差别不大,基本在同一数量级,在for循环中一般用i++即可。