在java中,循环语句中变量的声明是如何工作的
在上面的代码中,局部变量y在do while语句块的作用域内。这对循环的所有迭代都有效。那么为什么java不在第一次迭代之后的后续迭代中抛出一个错误“变量Y已经定义”,因为我们在每次迭代中都重新定义了相同的变量?变量在java中,循环语句中变量的声明是如何工作的,java,Java,在上面的代码中,局部变量y在do while语句块的作用域内。这对循环的所有迭代都有效。那么为什么java不在第一次迭代之后的后续迭代中抛出一个错误“变量Y已经定义”,因为我们在每次迭代中都重新定义了相同的变量?变量x在循环的所有迭代的范围内,变量y分别位于循环的每个迭代的范围内 当执行超出{}大括号时,y超出范围(并消失)。因此,当计算(x>=0)时,y不在范围内。您可以通过尝试在条件中使用y来测试,您将看到一个错误,告诉您没有声明y变量 那么,为什么java不在第一次迭代之后的后续迭代中抛出
x
在循环的所有迭代的范围内,变量y
分别位于循环的每个迭代的范围内
当执行超出{}
大括号时,y
超出范围(并消失)。因此,当计算(x>=0)时,y
不在范围内。您可以通过尝试在条件中使用y
来测试,您将看到一个错误,告诉您没有声明y
变量
那么,为什么java不在第一次迭代之后的后续迭代中抛出一个错误“变量Y已经定义”,因为我们在每次迭代中都要重新定义相同的变量
一旦迭代结束,变量y
就会消失,并且在下一次迭代中声明了一个新的y
因此,如果您迭代3次,每次声明一个新的y
,并且3次死亡
public class Test1{
public static void main(String[] args){
int x = 3;
do {
int y = 1;
System.out.print(y++ + " ");
x--;
} while(x >= 0);
}
}
如果展开循环,代码基本上如下所示:
do {
int y = 1; // created
System.out.print(y++ + " ");
x--;
// going to die here as the scope of the block ending here
} while(x >= 0);
每个
y
都有自己的作用域,即它们只存在于其封闭大括号内。因此,创建了四个不同的变量,并且应该打印1
。在每次循环迭代中,您都会新声明变量y并用值1实例化它。循环并不影响变量y的状态,因为每次循环开始时都会声明变量y。因此,它只是忽略以前的状态,并在每次循环迭代中以y=1的形式重新开始。基本上,它是每次迭代中的一个新变量。“这对循环的所有迭代都有效。”-实际上,不是。y
的值不会从一个循环迭代持续到下一个循环迭代。(还有Jon所说的。)@Jon Skeet,在这种情况下,java是否每次都隐式地将变量的值从旧的迭代复制到新的迭代?或者,在每次迭代中,本地定义的变量将从其默认值开始。不,每个变量在逻辑上都是一个“新”变量。@MayankMadhav,即使它按照您的建议做了一些事情,也无法观察到这一点,因为您无法访问变量的值而不首先声明它。
{
int y=1;
System.out.print(y++ + " ");
}
{
int y=1;
System.out.print(y++ + " ");
}
{
int y=1;
System.out.print(y++ + " ");
}
{
int y=1;
System.out.print(y++ + " ");
}