【问题标题】:JAVA When do comparisons evaluate to boolean values? At run-time or at compile-time?JAVA 比较何时计算为布尔值?在运行时还是在编译时?
【发布时间】:2018-05-02 05:01:00
【问题描述】:

在 Java 中,比较何时计算为布尔值?它是在运行时还是在编译时? 例如,想象一下:

int x = 6; 
if (x > 7) { doSth(); }

编译后会在字节码中表示为“x > 7”还是表示为布尔值“false”?

【问题讨论】:

  • 取决于编译器。一些聪明的编译器可能会在编译时对此进行评估。其他人将允许这种情况在运行时发生。
  • 我会在上面补充一点,如果你在 if 块内添加一个断点,如果你调试但不能进入,那么这可能意味着编译器完全优化了 if挡住。

标签: java boolean comparison


【解决方案1】:

这取决于编译器。

一些编译器会尽量聪明,并在可能的情况下在编译时评估表达式。这样的编译器会认识到,在if 语句时,x 只能是6,因此x < 7 将始终为假。他们甚至可能会移除受此if 语句保护的块。

但是,编译器没有义务这样做。一个简单的编译器可能不会执行任何此类操作,并且整个代码将进入字节码,尽管它永远不会被执行。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-26
    • 1970-01-01
    • 2013-08-29
    • 2013-09-17
    • 1970-01-01
    • 2021-11-28
    相关资源
    最近更新 更多