[問題] 變數宣告需要提到迴圈外嗎?

看板java作者 (不重要)時間8年前 (2016/05/10 13:57), 編輯推噓3(3017)
留言20則, 7人參與, 最新討論串1/1
各位先進安好 之前寫迴圈,都會將變數宣告提到外面來,如: 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

05/10 14:05, , 1F
迴圈外沒人用到,就不用放外面啊。scope 外面的 scope 少
05/10 14:05, 1F

05/10 14:06, , 2F
一個變數,少一個失手的機會啊
05/10 14:06, 2F

05/10 14:06, , 3F
不過不理解為何你想把他放外頭,能說說你的想法嗎?
05/10 14:06, 3F

05/10 14:16, , 4F
heap的問題,所以宣告放外面,
05/10 14:16, 4F

05/10 14:16, , 5F
但這會有數量的問題,數量多才會有問題
05/10 14:16, 5F

05/10 14:25, , 6F
我想說這樣不用再迴圈內一直宣告變數,程式會跑快一點
05/10 14:25, 6F

05/10 14:26, , 7F
剛剛測試跑一千次執行時間都差不多 有多此一舉的感覺..
05/10 14:26, 7F

05/10 14:54, , 8F
Java的宣告local變數只是在compile時變數表多加一個變數
05/10 14:54, 8F

05/10 15:00, , 9F
執行到method時stack多留一個位置
05/10 15:00, 9F

05/10 15:01, , 10F
並不是跑到宣告那行時會做什麼動作..
05/10 15:01, 10F

05/10 15:13, , 11F
了解 謝謝各位喔
05/10 15:13, 11F

05/10 21:49, , 12F
http://goo.gl/2u64rZ 看起來和物件是否immutable 有關
05/10 21:49, 12F

05/10 21:52, , 13F
多執行序時 不是immutable 若使用iterator會導至non thread s
05/10 21:52, 13F

05/10 21:53, , 14F
Non thread safe,不然其實也只有scope的差別
05/10 21:53, 14F

05/11 02:39, , 15F
樓上說的這個沒關係吧 區域變數的話沒有併行存取的問題
05/11 02:39, 15F

05/16 01:16, , 16F
樓樓上錯誤。看來你沒有真的嘗試理解那討論真正在討
05/16 01:16, 16F

05/16 01:16, , 17F
論什麼
05/16 01:16, 17F

05/16 01:19, , 18F
另,最近在SO 也有回過類似的討論,寫一段小程式加jav
05/16 01:19, 18F

05/16 01:19, , 19F
ap就能印證宣告放在loop 內或外並無損效能,就算會損
05/16 01:19, 19F

05/16 01:19, , 20F
也是放外面會損的機會比較大。
05/16 01:19, 20F
文章代碼(AID): #1NCNW-dd (java)