鉴于示例代码:
boolean foo(String arg)
{
if( arg != null && arg.equalsIgnoreCase("bar") )
//Do something
}
我是否保证仅在equalsIgnoreCase()
不是arg
的情况下才会调用null
?
答案 0 :(得分:3)
是的,Java确实提供了从左到右操作的条件的短篇小说。
条件和操作员&&就像& (§15.22.2),但仅在其左侧操作数的值为真时才计算其右侧操作数。
如果结果值为
false
,则条件和表达式的值为false
,并且不评估右侧操作数表达式 。如果左侧操作数的值为true,则评估右侧表达式;如果结果具有布尔类型,则进行拆箱转换(第5.1.8节)。结果值将成为条件和表达式的值。
答案 1 :(得分:1)
是的,Java将保证仅在equalsIgnoreCase
不为空时才调用arg
。它将从左到右评估其操作数,在&&
(和||
)的情况下,如果不需要对其进行评估,它将不会评估右操作数。
条件和操作员&&就像& (§15.22.2),但仅在其左侧操作数的值为真时才计算其右侧操作数。
和
在运行时,首先计算左侧操作数表达式;如果结果具有布尔类型,则进行拆箱转换(§5.1.8)。
如果结果值为false,则条件表达式和表达式的值为false,并且不评估右侧操作数表达式。