在编译时评估常量表达式.....?

时间:2012-09-14 19:00:19

标签: java string

  

可能重复:
  Why doesn't a Java constant divided by zero produce compile time error?

String s1="hi"+"Ram"

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

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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

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