C#中的i++和++i
?
剛剛學(xué)習(xí)C#的時(shí)候,難免會遇到一些麻煩,而我覺得最有意思的是i++和++i。先介紹下它們吧!!
i++ 俗稱后加加:在處理運(yùn)算的時(shí)候先不做運(yùn)算,等輸出的時(shí)候再加,這是我個(gè)人的理解。++i 俗稱先加加
:在處理運(yùn)算的時(shí)候先加。
然后做相應(yīng)的運(yùn)算下面來看幾個(gè)例子:
?
(1)
?
int i = 1; i++; Console.WriteLine(i);?
?
?
?
?
最后結(jié)果:2
?
(2)
?
int i = 1; ++i; Console.WriteLine(i);
結(jié)果:2
?
結(jié)論:從(1)(2)看出不管是i++還是++i輸出最后的結(jié)果都是經(jīng)過計(jì)算的。
(3)
?
int i = 1,j = 2,sum; sum = j + i++; Console.WriteLine(i); Console.WriteLine(sum);?
?
?
?
?
結(jié)果:2 3
(4)
?
int i = 1,j = 2,sum; sum = j + ++i; Console.WriteLine(i); Console.WriteLine(sum);結(jié)果:24
結(jié)論:i++在運(yùn)算的時(shí)候先不做計(jì)算,等運(yùn)算結(jié)束后在做加計(jì)算。++i在運(yùn)算的時(shí)候就已經(jīng)做了加計(jì)算。
?
?
是不是瞬間明白了,接下來是最經(jīng)典的部分了:(i++)+(i++)、(i++)+(++i)、(++i)+(++i)
(5)
?
int i = 1, j = 1; j = (i++) + (i++); Console.WriteLine(i); Console.WriteLine(j);結(jié)果:33
?
(6)
?
int i = 1, j = 1; j = (i++) + (++i); Console.WriteLine(i); Console.WriteLine(j);結(jié)果:34
?
(7)
?
int i = 1, j = 1; j = (++i) + (++i); Console.WriteLine(i); Console.WriteLine(j);結(jié)果:35
?
結(jié)論:上面這三個(gè)例子更明顯的看出,加加在前和加加在后的區(qū)別!(PS:當(dāng)然有新手看不明白,
沒關(guān)系。首先是兩個(gè)括號,括號的運(yùn)算級別比加號高,所以先算括號里面的。加號運(yùn)算符的執(zhí)
行順序是從左到右。所以執(zhí)行順序是:( 1 )+( 2 ),+號是最后運(yùn)算的。拿第一個(gè)舉例吧,
j=(i++)+(i++) ,第一個(gè)(i++)加加在后,先不做運(yùn)算,所以i=1,結(jié)束第一個(gè)后,到了第二個(gè)(i++)
的時(shí)候i已經(jīng)做出了計(jì)算i=2(ps:因?yàn)樯弦粋€(gè)的i++不做計(jì)算,執(zhí)行完了那個(gè)運(yùn)算再做計(jì)算),
第二個(gè)(i++),此時(shí)的i同樣不做計(jì)算,i=2,然后計(jì)算加法j=1+2,此時(shí)的i=3,輸出結(jié)果:i=3,j=3)。
執(zhí)行效率:
i++在執(zhí)行的時(shí)候會在內(nèi)存中復(fù)制一個(gè)副本執(zhí)行+,實(shí)際i的值在執(zhí)行的時(shí)候是沒有執(zhí)行+的,等到該語句執(zhí)行完,再把這個(gè)++執(zhí)行結(jié)果賦值給這個(gè)i,然后在內(nèi)存中回收這個(gè)副本。
++i是直接執(zhí)行這個(gè)++,不會有內(nèi)存復(fù)制的開銷
測試:
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++總共花費(fè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總共花費(fèi)" + ts2.TotalMilliseconds + "ms.");Console.Read(); } i++總共花費(fèi)2677.6881ms. ++i總共花費(fèi)2520.9784ms.總結(jié):我相信看完這么寫經(jīng)典的例子后,入坑的同學(xué)已經(jīng)有了一定的理解。在實(shí)際情況中,
不同的編譯器不同的語言中,后面三個(gè)例子的最后結(jié)果是不相同的,所以,在實(shí)際開發(fā)
中避免這種現(xiàn)象出現(xiàn)!
注:i--和--i原理一樣
?
總結(jié)
以上是生活随笔為你收集整理的C#中的i++和++i的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。