Java 常量表达式在编译时求值。。。。。?

Java 常量表达式在编译时求值。。。。。?,java,string,Java,String,可能重复: 是一个常量表达式,在编译时求值。但它是一个常量除以零 也是一个常量表达式,并在运行时进行计算。为什么?可以在不改变类工作方式的情况下优化字符串。这就是为什么可以在编译时对其进行评估 表达式1.0/0.0不是一个错误,只要您不计算它,但它不能在编译时计算,因为这会改变其含义(它会使一个完全有效的表达式出错(只要不计算)表达式。我同意智能编译器可能会阻止您这样做,但规范必须允许这样做。如果编译器能够保持与在运行时相同的语义,则可以在编译时计算常量值。如果不能(例如,除以零的情况)然后将

可能重复:

是一个常量表达式,在编译时求值。但它是一个常量除以零
也是一个常量表达式,并在运行时进行计算。为什么?

可以在不改变类工作方式的情况下优化字符串。这就是为什么可以在编译时对其进行评估


表达式
1.0/0.0
不是一个错误,只要您不计算它,但它不能在编译时计算,因为这会改变其含义(它会使一个完全有效的表达式出错(只要不计算)表达式。我同意智能编译器可能会阻止您这样做,但规范必须允许这样做。

如果编译器能够保持与在运行时相同的语义,则可以在编译时计算常量值。如果不能(例如,除以零的情况)然后将计算延迟到运行时。有关更多信息,请阅读JLS 15.28

String s1="hi"+"Ram"