是的,Java编译器确实将静态常量值(如
SIZE您的示例中的值)替换为它们的文字值。
因此,如果您以后要
SIZE在类中进行更改
A但不重新编译类
b,则仍会在class中看到旧值
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。再次运行,您将看到正在打印的旧值。



