为什么以下工作正常?
String str;
while (condition) {
str = calculateStr();
.....
}
但这据说是危险/不正确的:
while (condition) {
String str = calculateStr();
.....
}
是否需要在循环外声明变量?
局部变量的范围应始终尽可能小。
在你的例子中我假设str
is not在外部使用while
循环,否则你不会问这个问题,因为在while
循环不是一个选项,因为它无法编译。
所以,自从str
is not在循环外使用,尽可能小的范围str
is withinwhile 循环。
所以,答案是强调地 that str
绝对应该在 while 循环内声明。没有如果,没有并且,没有但是。
可能违反此规则的唯一情况是,如果由于某种原因,必须将每个时钟周期从代码中挤出是至关重要的,在这种情况下,您可能需要考虑在外部作用域中实例化某些内容并重用它,而不是在内部作用域的每次迭代中重新实例化它。但是,这不适用于您的示例,因为 java 中字符串的不可变性:始终会在循环开始时创建 str 的新实例,并且必须在循环结束时将其丢弃,因此有不可能在那里进行优化。
EDIT:(在答案中插入我的评论)
无论如何,正确的做法是正确编写所有代码,为产品建立性能要求,根据该要求衡量最终产品,如果不满足,则进行优化。通常最终发生的事情是,您找到方法在几个地方提供一些漂亮且正式的算法优化,使我们的程序满足其性能要求,而不必遍历整个代码库并调整和破解其中的内容为了压缩时钟周期。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)