for(int i = 0; i < 20 * 40 * 60 * 80; i++){ ... }
相比:
for(int i = 0; i < 3840000; i++){ ... }
第一個循環的運行速度比第二慢得多(做了一些時間的試驗),即使有條件的價值永遠不會改變任何整個迭代階段。當然,用這種方法會有所不同,因爲這個值可能會改變(即使它可能不應該)。我只是想知道爲什麼Java不會緩存/臨時存儲這個值。
long fact10 = factorial(10);
for(long n = 0; n < fact10; n++) vs for(long n = 0; n < factorial(10); n++)
cache/temp,是不是依賴於實現?我想原因可能是,第一個是表達。 – kosa 2012-08-03 02:53:16
你的第二個例子與你的第一個例子完全不同。您的第一個示例使用常量值,第二個示例使用方法調用。就編譯器所知,連續調用'factorial(10)'可能會返回不同的結果。 Java中沒有內置[memoization](http://en.wikipedia.org/wiki/Memoization)機制。 – Jeffrey 2012-08-03 02:54:45
另外,就第一個例子而言,你是否在同一個jvm運行中運行它們?如果是這樣,你是否首先加熱一切?執行這兩個測試的順序很重要,因爲jvm的開銷和初始化幾乎肯定會降低第一個測試的速度。 – Matt 2012-08-03 03:34:25