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原理一樣
?
總結
以上是生活随笔為你收集整理的C#中的i++和++i的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 判断节点包含
- 下一篇: SQL-10 获取所有非manager的