保证if语句中的条件顺序?

时间:2014-04-18 16:10:35

标签: java

鉴于示例代码:

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

我是否保证仅在equalsIgnoreCase()不是arg的情况下才会调用null

2 个答案:

答案 0 :(得分:3)

是的,Java确实提供了从左到右操作的条件的短篇小说。

JLS states

  

条件和操作员&&就像& (§15.22.2),但仅在其左侧操作数的值为真时才计算其右侧操作数。

     
     

如果结果值为false,则条件和表达式的值为false,并且不评估右侧操作数表达式

     

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

答案 1 :(得分:1)

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

Section 15.23 of the JLS州:

  

条件和操作员&&就像& (§15.22.2),但仅在其左侧操作数的值为真时才计算其右侧操作数。

  

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

     

如果结果值为false,则条件表达式和表达式的值为false,并且不评估右侧操作数表达式。