为什么下面的工作正常?
String str;
while (condition) {
str = calculateStr();
.....
}
但是下面这个被认为是危险的/不正确的:
while (condition) {
String str = calculateStr();
.....
}
有必要在循环之外声明变量吗?
为什么下面的工作正常?
String str;
while (condition) {
str = calculateStr();
.....
}
但是下面这个被认为是危险的/不正确的:
while (condition) {
String str = calculateStr();
.....
}
有必要在循环之外声明变量吗?
当前回答
变量的声明应该尽可能靠近使用它们的地方。
它使RAII(资源获取初始化)更容易。
它使变量的范围保持紧凑。这让优化器工作得更好。
其他回答
实际上,上面提到的问题是一个编程问题。你想如何编写代码?在哪里需要访问“STR”?声明一个局部用作全局变量的变量是没有用的。我相信这是编程基础知识。
在循环中声明将限制各自变量的范围。这完全取决于项目对变量范围的要求。
这两个例子的结果是一样的。但是,第一个函数为你提供了在while循环之外使用str变量的方法;第二个则不然。
我认为回答你的问题最好的资源是下面的帖子:
在循环前或循环中声明变量的区别?
根据我的理解,这个东西是语言依赖的。IIRC Java优化了这一点,所以没有任何区别,但JavaScript(例如)将在每次循环中完成整个内存分配。特别是在Java中,我认为当完成分析时,第二个程序会运行得更快。
正如很多人指出的那样,
String str;
while(condition){
str = calculateStr();
.....
}
没有比这更好的了:
while(condition){
String str = calculateStr();
.....
}
因此,如果你不重用变量,就不要在变量作用域之外声明变量。