变量可能在循环中分配?

Variable might be assigned in loop?

我不知道为什么当final变量在循环中初始化并且循环只迭代一次时代码没有编译?循环是否以某种方式 运行 不止一次并且对变量 x 进行了多次赋值?

public static void main(String args[]) {

    int y;
    final int x;
    y=1;
    while(y<=1) {
        x=10;       //Compile time error; even loop iterate only once.
        y++;
    }
}

删除关键字 final。您不能一次又一次地为 final 的变量赋值。您不能在范围循环外定义的 forwhile 循环中初始化 final 值。即使循环被调用一次,编译器也不知道循环会被调用多少次。

在java中,final 变量是常量,因此您不能更改它的值。在上面的代码中,x 是最终变量,我看到您正在尝试更改 x 的值。所以你得到了编译器时间错误。

当你声明了实例变量时

final int x;

x 赋值为 0。 final 标签不允许更改。

while(y<=1) {
    x=10;       //Compile time error; even loop iterate only once.
y++;
}

在 while 循环中,您将 x 分配给 10,这违反了 final 规则。

编译器不关心循环中的代码在运行次会执行多少次。为防止 可能 发生重新赋值,不允许在循环中分配最终变量。