为什么下面的工作正常?
String str;
while (condition) {
str = calculateStr();
.....
}
但是下面这个被认为是危险的/不正确的:
while (condition) {
String str = calculateStr();
.....
}
有必要在循环之外声明变量吗?
为什么下面的工作正常?
String str;
while (condition) {
str = calculateStr();
.....
}
但是下面这个被认为是危险的/不正确的:
while (condition) {
String str = calculateStr();
.....
}
有必要在循环之外声明变量吗?
当前回答
如果你的calculateStr()方法返回null,然后你试图在str上调用一个方法,你有NullPointerException的风险。
更一般地说,避免使用空值变量。顺便说一下,它对类属性更强。
其他回答
实际上,上面提到的问题是一个编程问题。你想如何编写代码?在哪里需要访问“STR”?声明一个局部用作全局变量的变量是没有用的。我相信这是编程基础知识。
str变量将可用,并在内存中保留一些空间,即使在执行下面的代码之后。
String str;
while(condition){
str = calculateStr();
.....
}
str变量将不可用,内存也将被释放,这是在下面的代码中为str变量分配的。
while(condition){
String str = calculateStr();
.....
}
如果我们采用第二种方法,肯定会减少系统内存,提高性能。
在while循环之外声明String str允许它在while循环内外被引用。在while循环中声明String str只允许它在while循环中被引用。
这个问题的一个解决方案是提供一个变量作用域来封装while循环:
{
// all tmp loop variables here ....
// ....
String str;
while(condition){
str = calculateStr();
.....
}
}
当外部作用域结束时,它们将自动取消引用。
这两个例子的结果是一样的。但是,第一个函数为你提供了在while循环之外使用str变量的方法;第二个则不然。