Deb*_*ata 3 java variables final local
class Temp
{
public static void main(String[] args)
{
int x=10,y=20;
while (x<y)
{
System.out.println("Hello");
}
System.out.println("Hi");
}
}
Run Code Online (Sandbox Code Playgroud)
输出它打印Hello无限次
但是当我使局部变量final int x = 10时,y = 20; 然后它显示Statement Unreachable
制作这些变量final也会使它们成为常量变量.这意味着编译器可以使用它们初始化的值替换变量的使用.
因此,编译器尝试生成以下内容
while (10 < 20)
Run Code Online (Sandbox Code Playgroud)
这相当于
while (true)
Run Code Online (Sandbox Code Playgroud)
这将使它成为一个无限循环,并且块之后的代码将变得无法访问.
这是在Java语言规范中规定的,在这里
如果至少满足下列条件之一,则while语句可以正常完成:
while语句是可访问的,条件表达式不是值为true的常量表达式(第15.28节).
有一个可到达的break语句退出while语句.
这些都不满意,因此while声明无法正常完成.之后的一切都无法到达.