常量值未在运行时反映

Sau*_*mar 4 java compiler-construction constants

假设您编译以下两个类.第一个是代表客户; 第二,图书馆课.

public class Test{
    public static void main(String[] args) {
        System.out.println(Lib.FIRST + " " +
                           Lib.SECOND + " " +
                           Lib.THIRD);
    }
}


public class Lib{
    private Lib() { }; // Uninstantiable
    public static final String FIRST = "the";
    public static final String SECOND = null;
    public static final String THIRD = "set";
}
Run Code Online (Sandbox Code Playgroud)

打印:

{null set}

现在假设您按如下所示修改库类并重新编译它而不是客户端程序:

public class Lib{
    private Lib() { }; // Uninstantiable
    public static final String FIRST = "physics";
    public static final String SECOND = "chemistry";
    public static final String THIRD = "biology";
}
Run Code Online (Sandbox Code Playgroud)

打印:

{化学集}

为什么SECOND值改变,但不是FIRST还是THIRD

Boz*_*zho 7

这是一个众所周知的警告 - 在编译客户端程序时会内联常量,因此您也必须重新编译它.

也可以看看: