Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在java中,循环语句中变量的声明是如何工作的_Java - Fatal编程技术网

在java中,循环语句中变量的声明是如何工作的

在java中,循环语句中变量的声明是如何工作的,java,Java,在上面的代码中,局部变量y在do while语句块的作用域内。这对循环的所有迭代都有效。那么为什么java不在第一次迭代之后的后续迭代中抛出一个错误“变量Y已经定义”,因为我们在每次迭代中都重新定义了相同的变量?变量x在循环的所有迭代的范围内,变量y分别位于循环的每个迭代的范围内 当执行超出{}大括号时,y超出范围(并消失)。因此,当计算(x>=0)时,y不在范围内。您可以通过尝试在条件中使用y来测试,您将看到一个错误,告诉您没有声明y变量 那么,为什么java不在第一次迭代之后的后续迭代中抛出

在上面的代码中,局部变量y在do while语句块的作用域内。这对循环的所有迭代都有效。那么为什么java不在第一次迭代之后的后续迭代中抛出一个错误“变量Y已经定义”,因为我们在每次迭代中都重新定义了相同的变量?

变量
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++ + " ");
}