为了账号安全,请及时绑定邮箱和手机立即绑定

&&(AND)和|| (或)在IF声明中

&&(AND)和|| (或)在IF声明中

森栏 2019-08-16 17:04:32
&&(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));  }partialHitsHashMap 在哪里。如果第一个陈述是真的,会发生什么? Java还会检查第二个声明吗?因为为了使第一个语句为真,HashMap不应该包含给定的键,所以如果选中第二个语句,我会得到NullPointerException。所以简单来说,如果我们有以下代码if(a && b)  if(a || b)Java会检查第一种情况b是否a为假,a第二种情况是否为真?
查看完整描述

3 回答

?
ibeautiful

TA贡献1993条经验 获得超5个赞

不,它不会被评估。这非常有用。例如,如果您需要测试String是否为空或空,您可以编写:

if (str != null && !str.isEmpty()) {
  doSomethingWith(str.charAt(0));}

或者,反之亦然

if (str == null || str.isEmpty()) {
  complainAboutUnusableString();} else {
  doSomethingWith(str.charAt(0));}

如果我们在Java中没有“短路”,我们会在上面的代码行中收到很多NullPointerExceptions。


查看完整回答
反对 回复 2019-08-16
?
慕桂英4014372

TA贡献1871条经验 获得超13个赞

Java有5种不同的布尔比较运算符:&,&&,|,||,^

&和&&是“和”运算符,| 和|| “或”运算符,^是“xor”

在检查参数值之前,单个参数将检查每个参数,而不考虑值。双重参数将首先检查左参数及其值,if true||)或false&&)保持第二个参数不变。声音是否合并?一个简单的例子应该说清楚:

给出所有例子:

 String aString = null;

和:

 if (aString != null & aString.equals("lala"))

在评估完成之前检查这两个参数,并为第二个参数抛出NullPointerException。

 if (aString != null && aString.equals("lala"))

检查第一个参数并返回false,因此不会检查第二个参数,因为结果是false无论如何。

OR的相同:

 if (aString == null | !aString.equals("lala"))

也会引发NullPointerException。

 if (aString == null || !aString.equals("lala"))

检查第一个参数并返回true,因此不会检查第二个参数,因为结果是true无论如何。

XOR无法优化,因为它取决于两个参数。


查看完整回答
反对 回复 2019-08-16
?
翻过高山走不出你

TA贡献1875条经验 获得超3个赞

不,它不会被检查。此行为称为短路评估,是包括Java在内的许多语言的一项功能。


查看完整回答
反对 回复 2019-08-16
  • 3 回答
  • 0 关注
  • 687 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信