gpt4 book ai didi

编译时在代码中替换Java静态最终值?

转载 作者:行者123 更新时间:2023-12-01 16:37:31 34 4
gpt4 key购买 nike

在java中,假设我有以下内容

==fileA.java==
class A
{
public static final int SIZE = 100;
}

然后在另一个文件中我使用这个值

==fileB.java==  
import A;
class b
{
Object[] temp = new Object[A.SIZE];
}

编译时,SIZE 会被替换为值 100,这样,如果我要替换 FileA.jar 而不是 FileB.jar,对象数组会获得新值还是会替换它已被硬编码为 100,因为这是最初构建时的值?

最佳答案

是的,Java 编译器确实将示例中的静态常量值(如 SIZE)替换为其文字值。

因此,如果您稍后更改类 A 中的 SIZE 但不重新编译类 b,您仍然会看到旧的b 类中的值。您可以轻松地测试一下:

文件A.java

public class A {
public static final int VALUE = 200;
}

文件B.java

public class B {
public static void main(String[] args) {
System.out.println(A.VALUE);
}
}

编译A.java和B.java。现在运行:java B

更改 A.java 中的值。重新编译A.java,但不重新编译B.java。再次运行,您将看到打印旧值。

关于编译时在代码中替换Java静态最终值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61928617/

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