2011-03-15 62 views
0

在Java是有在定時兩個環路的差:環路差異

for (int i=1; i<11; ++i) 
{ 
    // do stuff 
} 

AND

for (int i=100; i<111; ++i) 
{ 
    // do stuff 
} 
+2

微優化? – 2011-03-15 11:48:49

+1

它會通過設置位來節省一些能量;) – 2011-03-15 11:50:32

+0

@Jigar Joshi,Off and on bit可能會消耗相同數量的能量。它改變使用能量最多的能量。 ;) – 2011-03-15 12:24:02

回答

5

第二回路將運行1周比第一更多的時間。

+1

另外,'i'的值將會不同;-) – 2011-03-15 11:49:17

+1

@Victor:true,但OP正在討論時間安排:) – Nick 2011-03-15 11:50:06

+0

第二個實例中的差異將相當於第一個中的0到11。 – 2011-03-15 11:50:21

0

由於111-100 = 11和11-1 = 10,第二個循環將比第一個循環多執行一次。

如果使用

for (int i=101; i<111; ++i) 
{ 
    // do stuff 
} 

那麼結果應該是一樣的第一循環,定時明智的。當然,事情會有所不同,如果你真的在你的代碼的

// do stuff 

部分使用i

0

有一個在字節碼的至少一個(微)差:

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 ...