【问题标题】:Guarantee of order of conditions in if statement? [duplicate]if语句中条件顺序的保证? [复制]
【发布时间】:2014-04-18 16:10:34
【问题描述】:

鉴于示例代码:

boolean foo(String arg)
{
    if( arg != null && arg.equalsIgnoreCase("bar") )
        //Do something
}

我是否保证只有在arg 不是null 时才调用equalsIgnoreCase()

【问题讨论】:

  • Java 规范以外的?
  • 是的。这正是 && 的设计目的(在 C 中)。同样||.

标签: java


【解决方案1】:

是的,Java 确实为条件语句提供了短循环,从左到右操作。

JLS states:

条件与运算符 && 类似于 &(第 15.22.2 节),但仅当其左侧操作数的值为真时才计算其右侧操作数。


如果结果值为false,则条件与表达式的值为false,并且不计算右侧操作数表达式

如果左侧操作数的值为真,则计算右侧表达式;如果结果具有布尔类型,则将进行拆箱转换(第 5.1.8 节)。结果值成为条件与表达式的值。

【讨论】:

    【解决方案2】:

    是的,Java 将保证仅当arg 不为空时才调用equalsIgnoreCase。它将从左到右评估其操作数,对于&&(和||),如果不需要评估右操作数,它将不会评估它。

    Section 15.23 of the JLS 状态:

    条件与运算符 && 类似于 &(第 15.22.2 节),但仅当其左侧操作数的值为 true 时才计算其右侧操作数。

    在运行时,首先计算左侧操作数表达式;如果结果为布尔类型,则进行拆箱转换(第 5.1.8 节)。

    如果结果值为 false,则条件与表达式的值为 false,并且不计算右侧操作数表达式。

    【讨论】:

      猜你喜欢
      • 2022-12-31
      • 2013-05-18
      • 1970-01-01
      • 2017-10-26
      • 1970-01-01
      • 2015-03-04
      • 2013-08-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多