【问题标题】:Constant expression are evaluated at compile time.....? [duplicate]常量表达式在编译时评估.....? [复制]
【发布时间】:2012-09-14 19:00:19
【问题描述】:

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

String s1="hi"+"Ram"

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

【问题讨论】:

标签: java string


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2012-12-26
      • 1970-01-01
      • 2020-04-23
      • 2016-11-11
      • 2014-06-16
      • 2015-05-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多