【发布时间】:2012-09-14 19:00:19
【问题描述】:
可能重复:
Why doesn't a Java constant divided by zero produce compile time error?
String s1="hi"+"Ram"
是一个常量表达式,在编译时求值。但是一个常量除以零 也是一个常量表达式并在运行时求值,为什么?
【问题讨论】:
可能重复:
Why doesn't a Java constant divided by zero produce compile time error?
String s1="hi"+"Ram"
是一个常量表达式,在编译时求值。但是一个常量除以零 也是一个常量表达式并在运行时求值,为什么?
【问题讨论】:
如果编译器可以保持与运行时相同的语义,则可以在编译时计算常量值。如果不是(例如,除以零的情况),那么它将计算推迟到运行时间。欲了解更多信息,请阅读 JLS 15.28。
【讨论】:
您的字符串可以在不改变类工作的情况下进行优化。这就是为什么它可以在编译时进行评估的原因。
表达式1.0/0.0 不是错误,只要你不评估它,但它不能在编译时评估,因为这会改变含义(它会从一个完美的有效(只要未评估)表达式。我同意智能编译器可以阻止您这样做,但规范必须允许。
【讨论】: