作者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/cn.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