Java是否保证内联字符串常量,如果它们可以在编译时确定
请考虑以下情况:
public Class1 {
public static final String ONE = "ABC";
public static final String TWO = "DEF";
}
public Class2 {
public void someMethod() {
System.out.println(Class1.ONE + Class1.TWO);
}
}
通常,您会期望编译器内联 ONE 和 TWO 常量。但是,这种行为有保证吗?是否可以在运行时部署 Class2 而不在类路径中包含 Class1,并期望它无论编译器如何工作,还是这是可选的编译器优化?
编辑:到底为什么要这样做?好吧,我有一个常量,它将在应用程序的两端(通过RMI的客户端和服务器)之间共享,在这种特殊情况下,将常量放在只能位于该除法的一侧的类上非常方便(因为它在逻辑上是拥有该常量值的类),而不是仅仅因为它需要由共享而将其放在任意常量类中。代码的两面。在编译时,它都是一组源文件,但在构建时,它被包除以。