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

&&(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第二种情况是否为真?


森栏
浏览 697回答 3
3回答

ibeautiful

不,它不会被评估。这非常有用。例如,如果您需要测试String是否为空或空,您可以编写:if&nbsp;(str&nbsp;!=&nbsp;null&nbsp;&&&nbsp;!str.isEmpty())&nbsp;{ &nbsp;&nbsp;doSomethingWith(str.charAt(0));}或者,反之亦然if&nbsp;(str&nbsp;==&nbsp;null&nbsp;||&nbsp;str.isEmpty())&nbsp;{ &nbsp;&nbsp;complainAboutUnusableString();}&nbsp;else&nbsp;{ &nbsp;&nbsp;doSomethingWith(str.charAt(0));}如果我们在Java中没有“短路”,我们会在上面的代码行中收到很多NullPointerExceptions。

慕桂英4014372

Java有5种不同的布尔比较运算符:&,&&,|,||,^&和&&是“和”运算符,|&nbsp;和||&nbsp;“或”运算符,^是“xor”在检查参数值之前,单个参数将检查每个参数,而不考虑值。双重参数将首先检查左参数及其值,if&nbsp;true(||)或false(&&)保持第二个参数不变。声音是否合并?一个简单的例子应该说清楚:给出所有例子:&nbsp;String&nbsp;aString&nbsp;=&nbsp;null;和:&nbsp;if&nbsp;(aString&nbsp;!=&nbsp;null&nbsp;&&nbsp;aString.equals("lala"))在评估完成之前检查这两个参数,并为第二个参数抛出NullPointerException。&nbsp;if&nbsp;(aString&nbsp;!=&nbsp;null&nbsp;&&&nbsp;aString.equals("lala"))检查第一个参数并返回false,因此不会检查第二个参数,因为结果是false无论如何。OR的相同:&nbsp;if&nbsp;(aString&nbsp;==&nbsp;null&nbsp;|&nbsp;!aString.equals("lala"))也会引发NullPointerException。&nbsp;if&nbsp;(aString&nbsp;==&nbsp;null&nbsp;||&nbsp;!aString.equals("lala"))检查第一个参数并返回true,因此不会检查第二个参数,因为结果是true无论如何。XOR无法优化,因为它取决于两个参数。

翻过高山走不出你

不,它不会被检查。此行为称为短路评估,是包括Java在内的许多语言的一项功能。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java