假设您编译以下两个类。第一个是代表客户;第二,图书馆课。
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";
}
打印:
{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";
}
打印:
{化学集}
为什么SECOND
值已更改,但FIRST
或THIRD
没有?
答案 0 :(得分:7)
这是一个众所周知的警告 - 在编译客户端程序时会内联常量,因此您也必须重新编译它。
另见:
答案 1 :(得分:3)
值内联(即“the”和“set”)是内联的,而编译时编译器没有内联null
。为避免这种情况,您可以使用访问器方法。