Mil*_*son 5 java compiler-construction final class javac
当我编译:
public static final boolean FOO = false;
public static final void fooTest() {
if (FOO) {
System.out.println("gg");
}
}
Run Code Online (Sandbox Code Playgroud)
我得到一个空方法fooTest() {}.但是当我编译时:
static boolean isBar = false;
public static final boolean BAR = isBar;
public static final void fooTest() {
if (BAR) {
System.out.println("gg");
}
}
Run Code Online (Sandbox Code Playgroud)
if语句包含在已编译的类文件中.这是否意味着java中有两种不同的"类型"静态final,或者这仅仅是编译器优化?
在第一种情况下,编译器进行优化.它知道Foo将永远是false和杀死代码永远不会达到.
在第二种情况下,您isBar要将非最终变量的值赋值给BAR.编译器无法判断变量isBar是否已在其他位置被修改,尤其是如果它不是私有的.因此,它不确定的价值BAR.因此他不能做优化.