IF语句中的&&(AND)和||(OR)。

我有以下代码。

if(!partialHits.get(req_nr).containsKey(z) || partialHits.get(req_nr).get(z) < tmpmap.get(z)){  
    partialHits.get(z).put(z, tmpmap.get(z));  
}

其中partialHits是一个HashMap。
如果第一条语句为真会怎样? Java还会检查第二条语句吗?因为为了使第一条语句为真,HashMap不应该包含给定的键,所以如果检查第二条语句,我将得到NullPointerException
因此,简单地说,如果我们有以下代码

if(a && b)  
if(a || b)

如果在第一种情况下a是假的,而在第二种情况下a是真的,Java会不会检查b

不,它将不会被检查。这种行为被称为短路评估,是包括Java在内的许多语言的一个特征。

评论(1)

不,如果a是真的(在or测试中),b将不被测试,因为测试的结果总是真的,不管b表达式的值是什么。

做一个简单的测试。

if (true || ((String) null).equals("foobar")) {
    ...
}

不会***抛出一个 "空指针异常"!

评论(0)

不会的,Java一旦知道结果就会短路,停止评估。

评论(0)