1. 程式人生 > >【Java】i++與++i的不同,從底層和效率上比較

【Java】i++與++i的不同,從底層和效率上比較

以前書本、視訊和網站上但到i++和++i的區別,都是簡單,兩句話。

i++,先運算,後賦值
++i,先賦值,後運算

舉個例子:(Java語言)

int i = 1;
System.out.print(i++);
int j = 1;//為了明顯區分,這裡再宣告一個j
System.out.print(++j);

答案分別是1和2;

i++和++i不能查原始碼,我可能一輩子就死記住誰先賦值誰先運算這兩句話。

一次偶然的機會,公司的同事問我,你知道i++和++i的有什麼不同嗎。我說這不簡單嘛,就兩句話。他接著問,它倆誰的效率更高。我說,不都一樣嘛。他笑著搖搖頭,然後在紙上寫了兩句話。

i++:Fetch i,copy i,increment i,return copy;
++i:Fetch i,increment i,return i;

後來我才知道Fetch是取出的意思,不過這不影響我明白這兩句話的意思。

i++:取出i,複製i,增加i,返回副本;
++i:取出i,增加i,返回i;

i++要增加一個副本,無疑是要多耗記憶體,當然效率要低一點,當然只是一丟丟罷了,根本不會對程式執行有明顯的影響。

我們現在在使用i++和++i時根本不會考慮效能和效率,只會考慮運算的時候會不會先加1。

今天寫點這,只是覺得一些底層的東西還是挺有意思的,拿出來給大家分享。