先说结论
循环体内声明的变量会在每次迭代中创建和销毁。
因此,如果需要输出某一随循环不断变化的变量,则该变量应声明在循环体之前。
否则,会出现 cannot find symbol 错误
错误示例
class Solution {
public int mySqrt(int x) {
if(x == 0) return 0;
double c = x, x0 = x;
while(true){
double x1 = 0.5 * (x0 + c/x0);
if(Math.abs(x0 - x1) < 1e-7){
break;
}
x0 = x1;
}
return (int)x1;
}
}

正确示例
将return的循环体内声明变量替换为循环体之前声明的变量
class Solution {
public int mySqrt(int x) {
if(x == 0) return 0;
double c = x, x0 = x;
while(true){
double x1 = 0.5 * (x0 + c/x0);
if(Math.abs(x0 - x1) < 1e-7){
break;
}
x0 = x1;
}
return (int)x0;//改动之处
}
}

个人小记
在2022年的最后一天(12.31),第一次写技术博客,小小得记录一下哈,有错误欢迎指教哈:-)
本文探讨了Java中循环体内声明的变量的生命周期,指出此类变量在每次迭代时都会被创建和销毁。因此,若需要在循环外使用循环内变化的变量,应将其声明在循环之前。错误示例中,返回的变量在循环体内声明,导致编译错误;正确示例中,将返回的变量移至循环体外,解决了问题。这是对编程实践中变量作用域和生存周期的重要理解。
813





