if-else结构中无法访问的代码

fas*_*ava 3 java compiler-construction if-statement

如果有以下代码我在eclipse中正确地在else处获得警告,如果代码:

final int x = 8;
if (x < 10) {
    System.out.println(x);
} else if (x < 5) {
    System.out.println(x);
}
Run Code Online (Sandbox Code Playgroud)

但如果我更换线路,我不会收到任何警告

final int x = 8;
Run Code Online (Sandbox Code Playgroud)

final int x = getX();
Run Code Online (Sandbox Code Playgroud)

getX() 在某处定义.

这是什么原因?

bsi*_*nau 11

JVM知道x 在编译时总是小于10,但如果你替换x声明

final int x = getX();
Run Code Online (Sandbox Code Playgroud)

JVM将知道x仅在运行时进行比较的值

相关问题:

  • 问题:如果getX()类似于int getX(){return 8;},它会成为一个问题吗? (3认同)