我的问题可能是非常基本的,但我认为它值得去问。我有以下代码:&&(AND)and || (或)在IF陈述
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)
将Java的检查b
如果a
是在第一种情况下假,如果a
在第二种情况下是真的吗?
是否存在按位比较以便您可以评估这两个表达式?即如果(str!= null | str.isEmpty())? (当然这不是一个实际的例子,实际上它很愚蠢,但你明白了) – Kezzer
只要表达式没有副作用,短路语义在逻辑上就等同于完整的评估。也就是说,如果A是真的,你知道A || B是真的,而不必评估B.只有当表达式有副作用时,才会有所作为。至于其他操作符,您可以使用'*'和'+'作为逻辑'和'和'或'; ((A1→0)×(B1→0))== 1“,((A1→0)+(B1→0))> 0。你甚至可以做'xor':'((A?1:0)+(B?1:0))== 1'。 – outis
@Kezzer:是真的按位比较吗?我认为它是一个布尔逻辑运算符。它与'按位'(整数)运算符不同,尽管它们具有相同的符号... –