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