&& 和 || 的区别 [复制]

IT小君   2021-12-08T01:46:34

我不明白 && 和 || 之间的区别 在某个方面。

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

现在,如果是假的,那么B看了,但条件不测试。

但....

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

现在,如果 a 为真,则不查看b ,并且不测试条件。

为什么是这样。我认为 && 和 || 的目的是 有点帮助加快事情的进展。如果它可以通过测试第一个条件来确定结果,则不需要查看第二个条件。但是在 && 的情况下,它确实会查看它。而在 || 的情况下 它剂量。

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

评论(5)
IT小君

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

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


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

请注意第二列 forAND和第一列 for OR:它们具有相同的值。这是理解为什么AND在第一个计算结果为 时忽略第二个参数的关键false:那是第二个参数无关紧要(第二列)的时候。OR运算符的情况正好相反:现在false第一个参数中的 a 意味着第二个参数很重要。但是,true第一个参数(第一列)中的 a 意味着可以忽略第二个参数。

我认为 && 和 || 的目的是 有点帮助加快事情的进展。

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

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

你可以写的原因

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

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

2021-12-08T01:46:34   回复
IT小君

&&用于执行and操作手段,如果任何一个expression/condition评估为假,整个事情都是假的。

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.
2021-12-08T01:46:35   回复
IT小君

&& is AND where as || is OR operator.&& 查找 false,表示如果第一个参数为 false,则不会测试第二个参数是否为真。|| 寻找真,意味着即使第一个参数为假,它也会测试第二个。如果两者都为假,则为假,否则为真。在 && 情况下,两者都为真,否则为真。

2021-12-08T01:46:35   回复
IT小君

a && b 如果 a 为假,则不可能为真,因此如果 a 真的为假,则无需检查 b。

a || b 如果 a 为真,则不能为假,因此如果 a 真的为真,则无需检查 b。

因此,它们被称为短路运算符。

如果您想阻止这种行为,请使用 & 和 | 反而。

2021-12-08T01:46:35   回复
IT小君

嗯...如果左手操作数为假时,问题是您对 && 运算符评估右手操作数的混淆,然后阅读以下内容:

条件和运算符(Java 语言规范)

具体来说,第一句话:

条件与运算符 && 类似于 &(第 15.22.2 节),但仅当其左侧操作数的值为真时才计算其右侧操作数。

最后一个:

因此, && 在布尔操作数上计算与 & 相同的结果。它的不同之处仅在于右侧操作数表达式是有条件地而不是始终进行计算的。

2021-12-08T01:46:35   回复