在Java是有在定時兩個環路的差:環路差異
for (int i=1; i<11; ++i)
{
// do stuff
}
AND
for (int i=100; i<111; ++i)
{
// do stuff
}
在Java是有在定時兩個環路的差:環路差異
for (int i=1; i<11; ++i)
{
// do stuff
}
AND
for (int i=100; i<111; ++i)
{
// do stuff
}
第二回路將運行1周比第一更多的時間。
另外,'i'的值將會不同;-) – 2011-03-15 11:49:17
@Victor:true,但OP正在討論時間安排:) – Nick 2011-03-15 11:50:06
第二個實例中的差異將相當於第一個中的0到11。 – 2011-03-15 11:50:21
由於111-100 = 11和11-1 = 10,第二個循環將比第一個循環多執行一次。
如果使用
for (int i=101; i<111; ++i)
{
// do stuff
}
那麼結果應該是一樣的第一循環,定時明智的。當然,事情會有所不同,如果你真的在你的代碼的
// do stuff
部分使用i
。
有一個在字節碼的至少一個(微)差:
i = 1
將被翻譯到ICONST_1
,而
i = 100
導致BIPUSH 100
首先是一個單一的操作碼,而第二個是一個操作碼後跟一個必須加載並符號擴展爲32位的字節。第一個通常比第二個更有效,但我認爲與整個循環相比,差異將不顯着(// do stuf
)。
第二(for (int i=100; i<111; ++i)
)肯定應優先選用的,而不是:
for (int i=1; i<11; ++i)
{
// do stuff with (i + 100)
}
它不僅慢 - 加入100每個交互 - 也少可讀IMHO ...
微優化? – 2011-03-15 11:48:49
它會通過設置位來節省一些能量;) – 2011-03-15 11:50:32
@Jigar Joshi,Off and on bit可能會消耗相同數量的能量。它改變使用能量最多的能量。 ;) – 2011-03-15 12:24:02