为什么java final变量显示无法访问的Statement

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无限次

但是当我使局部变量fi​​nal int x = 10时,y = 20; 然后它显示Statement Unreachable

Sot*_*lis 9

制作这些变量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声明无法正常完成.之后的一切都无法到达.