&&和和||

时间:2013-11-26 03:32:27

标签: java

我不明白&&和和||在某种程度上。

If(a && b) { then do this }

现在,如果a为false,则b 会查看,但不会测试该条件。

但是....

If(a || b) { then do this }

现在,如果a为真,那么b 不是 ,并且不会测试条件。

为什么会这样。我想到了&& amp;和||是为了帮助加快速度。如果它可以通过测试第一个条件来确定结果,则不需要查看第二个条件。但是对于&&它确实看着它。而在||的情况下它很有意义。

我有这个权利吗? 如果我这样做,为什么会这样?

5 个答案:

答案 0 :(得分:7)

要理解答案,请提醒自己ANDOR操作的真值表:

  AND  true   | false
     \--------+-------
true  | true  | false
------+-------+-------
false | false | false


   OR  true   | false
     \--------+-------
true  | true  | true
------+-------+-------
false | true  | false

请注意AND的第二列和OR的第一列:它们具有相同的值。这是理解AND在第一个求值为false时忽略第二个参数的原因的关键:当第二个参数无关紧要时(第二列)。对于OR运算符则相反:现在第一个参数中的false表示第二个参数确实重要。但是,第一个参数(第一列)中的true表示可以忽略第二个参数。

  

我想到了&&和||是为了帮助加快速度。

这是他们目的的一小部分。更大的一个是基于左侧保护表达的右侧。考虑一种您希望防范空{和null字符串的情况。如果&&||没有“短路”评估,您将被迫编写如下代码:

if (s == null) return false;
if (s.length() == 0) return false;

你可以写的原因

if (s == null || s.length() == 0) return false;

是短路:保证s.length()字符串不会调用null

答案 1 :(得分:2)

&& is AND where as || is OR operator.&&寻找假,意味着如果第一个参数为假,它不会测试第二个是真还是假。  ||寻找真实,意味着即使第一个参数为假,它也会测试第二个。如果两者都是假的则为假,否则为真。在&& case都是true然后是true否则为false。

答案 2 :(得分:1)

&&用于执行and操作,如果expression/condition中的任何一个评估为false,则整个事件都是错误的。

so if any one of the condition becomes false it won't even continue further to check 

||用于执行or操作,如果expression/condition中的任何一个评估为真实的事情都会变为真。

so it continues till the end to check atleast one condition to become true.

答案 3 :(得分:0)

如果a为false,则

a && b不能为true,因此如果确实为false,则无需检查b。

如果a为真,则

a || b不能为假,所以如果确实如此,则无需检查b。

出于这个原因,他们被称为短路运营商。

如果你试图打败这种行为,请使用&和|代替。

答案 4 :(得分:0)

嗯...关于机会,问题是你对&&和当左侧操作数为假时,运算符计算右侧操作数,然后读取:

Conditional And Operator (Java Language Specification)

具体来说,第一句话是:

  

条件和操作员&&就像& (§15.22.2),但评估   只有当左侧操作数的值为时,它的右侧操作数   真。

和最后一个:

  

因此,&&计算与&相同的结果在布尔操作数上。它有所不同   只是因为评估了右侧操作数表达式   有条件而不是总是。