gpt4 book ai didi

java - 导入的 java 类中的公共(public)静态最终变量

转载 作者:太空狗 更新时间:2023-10-29 22:32:54 24 4
gpt4 key购买 nike

我在工作场所碰巧遇到了一段 Java 代码。场景如下:有 2 个类 - ClassAClassB

ClassA 除了里面的 4 个 public static final 字符串值外什么都没有。它的目的是使用像 ClassA.variable 这样的值(不要问我为什么,这不是我的代码)。

ClassB 导入 ClassA。我编辑了 ClassA 中的字符串值并编译了它。当我运行 ClassB 时,我可以看到它使用的是旧值,而不是新值。我不得不重新编译 ClassB 以使其使用来自 ClassA 的新值! (我不得不重新编译导入 ClassA 的其他类!)

这仅仅是因为 JDK 1.6 还是我早该知道要重新编译 ClassB!开导我。 :)

最佳答案

如果类 ClassA 中的 final 变量的值恰好是编译时常量,则编译器可能已使用 ClassA< 将它们内联到类中 而不是生成运行时引用。我想,这就是您描述的情况。

例子:

public class Flags {
public static final int FOO = 1;
public static final int BAR = 2;
}

public class Consumer {
public static void main(String[] args) {
System.out.println(Flags.FOO);
}
}

在此示例中,编译器可能会将 FOO 的值合并到为 Consumer 生成的代码中,而不是生成等效的运行时引用。如果以后 FOO 的值发生变化,您将不得不重新编译 Consumer 以使其使用新值。

这是一个优化,在编译程序的效率和速度方面有一些优势。例如,内联该值可能会进一步优化使用它的表达式,例如:

int x = Flags.FOO * 10;

在此示例中,内联值(此处:1)使编译器能够注意到乘法没有区别,并且可以完全省略。

关于java - 导入的 java 类中的公共(public)静态最终变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1693091/

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