在某些情況下,我們使用一個循環爲方便起見,也可以「手動」執行一些操作,例如從我的應用程序處理MenuItem
S:增強的for循環VS處理對象手動
我創建了一個
MenuItem
s,然後使用增強的for
循環遍歷它。MenuItem[] fileActionsToLock ={ mMenu.findItem(R.id.action_share), mMenu.findItem(R.id.action_rename), mMenu.findItem(R.id.action_copy), mMenu.findItem(R.id.action_move) }; for (MenuItem i : fileActionsToLock) { i.setEnabled(false); i.getIcon().setAlpha(100); }
我單獨申請的值給每個
MenuItem
。mMenu.findItem(R.id.action_share).setEnabled(false); mMenu.findItem(R.id.action_share).getIcon().setAlpha(100); mMenu.findItem(R.id.action_rename).setEnabled(false); mMenu.findItem(R.id.action_rename).getIcon().setAlpha(100); mMenu.findItem(R.id.action_copy).setEnabled(false); mMenu.findItem(R.id.action_copy).getIcon().setAlpha(100); mMenu.findItem(R.id.action_move).setEnabled(false); mMenu.findItem(R.id.action_move).getIcon().setAlpha(100);
由於只有幾個元素,性能目視相同的。
- 但是哪個代碼工作得更快,爲什麼?
- 另外,在哪個時間點
fileActionsToLock
數組和臨時MenuItem
i
將被垃圾收集?
由於不需要像增強for循環那樣創建迭代器,因此手冊的速度會更快。它並沒有真正有所作爲,特別是在這種情況下只有很少的項目。不過,使用for循環的+1。明顯更容易和更好地擴展。 –
循環展開是一種常見的優化,比將語句組合成循環容易。把它寫成一個循環不僅更加清晰,而且還將JVM的展開決策留給了JVM,JVM擁有更多關於運行時環境的數據。 –
具有JIT的JVM不會自行展開循環嗎?迭代器將創建更多的開銷,並在創建它時最初放慢整個過程,但我不知道實際代碼將在循環的外側執行得更快。 – Rarw