为什么下面的工作正常?
String str;
while (condition) {
str = calculateStr();
.....
}
但是下面这个被认为是危险的/不正确的:
while (condition) {
String str = calculateStr();
.....
}
有必要在循环之外声明变量吗?
为什么下面的工作正常?
String str;
while (condition) {
str = calculateStr();
.....
}
但是下面这个被认为是危险的/不正确的:
while (condition) {
String str = calculateStr();
.....
}
有必要在循环之外声明变量吗?
当前回答
我认为回答你的问题最好的资源是下面的帖子:
在循环前或循环中声明变量的区别?
根据我的理解,这个东西是语言依赖的。IIRC Java优化了这一点,所以没有任何区别,但JavaScript(例如)将在每次循环中完成整个内存分配。特别是在Java中,我认为当完成分析时,第二个程序会运行得更快。
其他回答
在最小范围内声明对象可以提高可读性。
性能对于今天的编译器来说并不重要。(在此场景中) 从维护的角度来看,第二种选择更好。 在同一个地方声明和初始化变量,在尽可能窄的范围内。
正如Donald Ervin Knuth所说:
“我们应该忘记小的效率,大约97%的时候: 过早的优化是万恶之源”
例如,程序员让性能考虑影响一段代码的设计的情况。这可能导致设计不那么清晰,或者代码不正确,因为优化使代码变得复杂,而程序员被优化分散了注意力。
变量的声明应该尽可能靠近使用它们的地方。
它使RAII(资源获取初始化)更容易。
它使变量的范围保持紧凑。这让优化器工作得更好。
在内部,变量可见的范围越小越好。
根据谷歌Android开发指南,变量范围应该是有限的。请查看此链接:
极限变量范围
我认为回答你的问题最好的资源是下面的帖子:
在循环前或循环中声明变量的区别?
根据我的理解,这个东西是语言依赖的。IIRC Java优化了这一点,所以没有任何区别,但JavaScript(例如)将在每次循环中完成整个内存分配。特别是在Java中,我认为当完成分析时,第二个程序会运行得更快。