Tim*_*Tim 3 java evaluation conditional expression boolean
我想知道是否保证在Java程序中,只要左边的表达式(exp1)计算为false,就不会计算连接右边的布尔表达式(上面的exp2).我想知道因为我有一个如下表达式:
if (var != null && var.somePredicate())
// do something
Run Code Online (Sandbox Code Playgroud)
如果Java (var != null && var.somePredicate())在看到varnull 之后不能保证停止计算,那么它可能会尝试评估var.somePredicate()哪个会抛出NullPointerException.
所以我的问题是,Java在这方面是否保证了某种行为?或者写起来会更安全
if (var != null)
{
if (var.somePredicate())
// do something
}
Run Code Online (Sandbox Code Playgroud)
从Java语言规范,15.23条件和运算符&&:
该
&&运营商像&(§15.22.2),但评估其右边的操作数只有在其左侧操作数的值是true.
因此语言规范保证如果左侧是假的,则不会评估表达式的右侧.