为什么下面的工作正常?

String str;
while (condition) {
    str = calculateStr();
    .....
}

但是下面这个被认为是危险的/不正确的:

while (condition) {
    String str = calculateStr();
    .....
}

有必要在循环之外声明变量吗?


当前回答

根据谷歌Android开发指南,变量范围应该是有限的。请查看此链接:

极限变量范围

其他回答

在内部,变量可见的范围越小越好。

这两个例子的结果是一样的。但是,第一个函数为你提供了在while循环之外使用str变量的方法;第二个则不然。

如果你想在循环外使用STR;在外面宣布。否则,第二版就可以了。

在while循环之外声明String str允许它在while循环内外被引用。在while循环中声明String str只允许它在while循环中被引用。

如果你的calculateStr()方法返回null,然后你试图在str上调用一个方法,你有NullPointerException的风险。

更一般地说,避免使用空值变量。顺便说一下,它对类属性更强。