4

可能重复:
为什么 Java 常量除以零不会产生编译时错误?

String s1="hi"+"Ram"

是一个常量表达式并在编译时评估。但是常量除以零也是一个常量表达式并在运行时评估为什么?

4

2 回答 2

1

如果编译器可以保持与运行时相同的语义,则可以在编译时计算一个常量值。如果不是(例如,除以零的情况),那么它将计算推迟到运行时间。有关更多信息,请阅读 JLS 15.28。

于 2012-09-14T19:05:39.560 回答
0

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

该表达式1.0/0.0不是错误,只要您不对其进行评估,但不能在编译时对其进行评估,因为这会改变含义(它会从完全有效的错误(只要不是评估)表达式。我同意智能编译器可以阻止你这样做,但规范必须允许它。

于 2012-09-14T19:05:23.913 回答