用for-each 循環取代for 循環時,開發人員經常會遇到以下模式:
for (int i = 0, n = a.length; i 而不是更簡單的:
for (int i = 0; i 這提出了一個問題:額外的 n = a.length 賦值是否會影響陣列的效能?
答案
不,對 array.length 的呼叫是O(1) 或常數時間運算。
陣列的 .length 屬性是公共最終成員,存取它並不比局部變數慢。這與 size() 等方法呼叫不同,後者通常會涉及更多開銷。
現代 JIT 編譯器還可以最佳化對 .length 的呼叫以完全消除它。要驗證這一點,可以檢查 JIT 編譯器的原始程式碼或檢查轉儲的本機程式碼。
但是,JIT 編譯器可能無法始終執行此最佳化,例如在啟用偵錯或啟用偵錯時循環體包含過多的局部變數。
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3