看板 java 關於我們 聯絡資訊
各位先進安好 之前寫迴圈,都會將變數宣告提到外面來,如: ClassA aaa; for(int i=0; i<10; i++){ aaa = new ClassA(); -------- -------- } 但今天同事告知說不用這樣做 因為裡面的「new ClassA()」其實也是每次迴圈都在宣告 請問最好的做法是什麼呢? 這方面效能的知識有什麼關鍵字或書可以推薦嗎? -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 220.134.168.71 ※ 文章網址: https://www.ptt.cc/bbs/java/M.1462859838.A.9E7.html
qrtt1: 迴圈外沒人用到,就不用放外面啊。scope 外面的 scope 少 05/10 14:05
qrtt1: 一個變數,少一個失手的機會啊 05/10 14:06
qrtt1: 不過不理解為何你想把他放外頭,能說說你的想法嗎? 05/10 14:06
swpoker: heap的問題,所以宣告放外面, 05/10 14:16
swpoker: 但這會有數量的問題,數量多才會有問題 05/10 14:16
genomini: 我想說這樣不用再迴圈內一直宣告變數,程式會跑快一點 05/10 14:25
genomini: 剛剛測試跑一千次執行時間都差不多 有多此一舉的感覺.. 05/10 14:26
ssccg: Java的宣告local變數只是在compile時變數表多加一個變數 05/10 14:54
ssccg: 執行到method時stack多留一個位置 05/10 15:00
ssccg: 並不是跑到宣告那行時會做什麼動作.. 05/10 15:01
genomini: 了解 謝謝各位喔 05/10 15:13
jej: http://goo.gl/2u64rZ 看起來和物件是否immutable 有關 05/10 21:49
jej: 多執行序時 不是immutable 若使用iterator會導至non thread s 05/10 21:52
jej: Non thread safe,不然其實也只有scope的差別 05/10 21:53
haha02: 樓上說的這個沒關係吧 區域變數的話沒有併行存取的問題 05/11 02:39
adrianshum: 樓樓上錯誤。看來你沒有真的嘗試理解那討論真正在討 05/16 01:16
adrianshum: 論什麼 05/16 01:16
adrianshum: 另,最近在SO 也有回過類似的討論,寫一段小程式加jav 05/16 01:19
adrianshum: ap就能印證宣告放在loop 內或外並無損效能,就算會損 05/16 01:19
adrianshum: 也是放外面會損的機會比較大。 05/16 01:19