gpt4 book ai didi

javac 根据赋值方法不同地处理 static final

转载 作者:搜寻专家 更新时间:2023-10-31 08:26:48 26 4
gpt4 key购买 nike

当我编译时:

public static final boolean FOO = false;
public static final void fooTest() {
if (FOO) {
System.out.println("gg");
}
}

我得到一个空方法 fooTest() {}。但是当我编译时:

static boolean isBar = false;
public static final boolean BAR = isBar;
public static final void fooTest() {
if (BAR) {
System.out.println("gg");
}
}

if 语句包含在已编译的类文件中。这是否意味着 java 中有两种不同“类型”的静态最终,或者这只是编译器优化?

最佳答案

在第一种情况下,编译器会进行优化。它知道 Foo 将始终为 false 并杀死永远无法到达的代码。

在第二种情况下,您将非最终变量 isBar 的值分配给 BAR。编译器无法判断变量 isBar 是否已在其他地方被修改,尤其是当它不是私有(private)的时。因此它不确定BAR 的值。因此他不能做优化。

关于javac 根据赋值方法不同地处理 static final,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17885298/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com