仅在循环内使用的相同的声明赋值语句放在循环内还是循环外?

2017-06-21 11:26:57 +08:00
 esolve

譬如

Integer i = cal(x,y);
for(...){
    int k = i*j;
    ....
}

还是

    
for(...){
    Integer i = cal(x,y);
    int k = i*j;
    ....
}

i 仅仅在 for 内使用

1928 次点击
所在节点    问与答
7 条回复
nybux
2017-06-21 12:14:42 +08:00
要看你的 x,y 会不会随着循环发生变化。如果会变,那必须要放里面。
如果不会的话,而且循环次数很多,那放外面可以提高性能。
如果循环次数不多,cal 计算也很简单,那就看可读性了
rrfeng
2017-06-21 12:21:28 +08:00
这就体现出 for 的初始化语句的作用了啊。

for (Interger i = cal(x, y); i<=10; i++) {
...
}
vvchen
2017-06-21 15:06:04 +08:00
你能这么问,代表每次迭代 i 的值都固定。既然 i 值固定,为何还要在循环里每次重复计算?很明显放在外面更好,计算一次就可以。
esolve
2017-06-21 16:09:50 +08:00
@nybux
stackoverflow 上说定义 The scope of local variables should always be the smallest possible
说编译器会优化
不过对于赋值的话可能不成立?
msg7086
2017-06-22 05:54:20 +08:00
@esolve Smallest possible,在这里应该就是 for 循环的初始化区了,可以把变量限制在 for 块中,而且不会重复计算。
esolve
2017-07-02 04:58:48 +08:00
@msg7086 还有那个 k
实在 for 循环外定义一个 k 好
还是在里面定义好?
msg7086
2017-07-02 17:06:33 +08:00
如果固定,那也可以放在 for 的初始化区。要看你用的语言( Java ?)是否支持,支持就尽管放就好了。
虽然我觉得吧,只是一个循环而已,编译器应该是足够聪明去优化的,放在循环外面也可以的。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/370011

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX