为什么下面的工作正常?
String str;
while (condition) {
str = calculateStr();
.....
}
但是下面这个被认为是危险的/不正确的:
while (condition) {
String str = calculateStr();
.....
}
有必要在循环之外声明变量吗?
为什么下面的工作正常?
String str;
while (condition) {
str = calculateStr();
.....
}
但是下面这个被认为是危险的/不正确的:
while (condition) {
String str = calculateStr();
.....
}
有必要在循环之外声明变量吗?
当前回答
这个问题的一个解决方案是提供一个变量作用域来封装while循环:
{
// all tmp loop variables here ....
// ....
String str;
while(condition){
str = calculateStr();
.....
}
}
当外部作用域结束时,它们将自动取消引用。
其他回答
正如很多人指出的那样,
String str;
while(condition){
str = calculateStr();
.....
}
没有比这更好的了:
while(condition){
String str = calculateStr();
.....
}
因此,如果你不重用变量,就不要在变量作用域之外声明变量。
在while循环之外声明String str允许它在while循环内外被引用。在while循环中声明String str只允许它在while循环中被引用。
在循环中声明将限制各自变量的范围。这完全取决于项目对变量范围的要求。
这两个例子的结果是一样的。但是,第一个函数为你提供了在while循环之外使用str变量的方法;第二个则不然。
如果你的calculateStr()方法返回null,然后你试图在str上调用一个方法,你有NullPointerException的风险。
更一般地说,避免使用空值变量。顺便说一下,它对类属性更强。