为什么下面的工作正常?

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

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

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

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


当前回答

变量的声明应该尽可能靠近使用它们的地方。

它使RAII(资源获取初始化)更容易。

它使变量的范围保持紧凑。这让优化器工作得更好。

其他回答

在循环中声明将限制各自变量的范围。这完全取决于项目对变量范围的要求。

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

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

实际上,上面提到的问题是一个编程问题。你想如何编写代码?在哪里需要访问“STR”?声明一个局部用作全局变量的变量是没有用的。我相信这是编程基础知识。

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

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