可能重复:
Why doesn't a Java constant divided by zero produce compile time error?
String s1="hi"+"Ram"
是一个常量表达式,在编译时进行评估。但是常量除以零 也是一个常量表达式,并在运行时评估为什么?
答案 0 :(得分:1)
如果编译器可以保持与在运行时完成的语义相同的语义,则可以在编译时计算常量值。如果不是(例如,除以零的情况)则将计算推迟到运行时间。有关更多信息,请阅读JLS 15.28。
答案 1 :(得分:0)
您的字符串可以在不改变类的工作的情况下进行优化。这就是为什么它可以在编译时进行评估的原因。
表达式1.0/0.0
不是错误,只要你不评估它,但它不能在编译时进行评估,因为这会改变含义(它会产生错误)一个完全有效的(只要没有评估)表达式。我同意智能编译器可以阻止你这样做,但规范必须允许它。