Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
可能重复: 为什么 Java 常量除以零不会产生编译时错误?
String s1="hi"+"Ram"
是一个常量表达式并在编译时评估。但是常量除以零也是一个常量表达式并在运行时评估为什么?
如果编译器可以保持与运行时相同的语义,则可以在编译时计算一个常量值。如果不是(例如,除以零的情况),那么它将计算推迟到运行时间。有关更多信息,请阅读 JLS 15.28。
您的字符串可以在不改变类工作的情况下进行优化。这就是为什么它可以在编译时进行评估的原因。
该表达式1.0/0.0不是错误,只要您不对其进行评估,但不能在编译时对其进行评估,因为这会改变含义(它会从完全有效的错误(只要不是评估)表达式。我同意智能编译器可以阻止你这样做,但规范必须允许它。
1.0/0.0