&&和||之间的区别

我不明白&&和||之间的区别 在某种程度上。

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

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

但….

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

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

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

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

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

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

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

我想到了&&和||的目的 是为了帮助提高速度。

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

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

你可以写的原因

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

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

&&用于执行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. 

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

如果a为假,则a && b不能为真,所以如果真的是假,则无需检查b。

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

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

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

嗯…关于机会问题是当左手操作数为假时,关于&&运算符评估右手操作数的混淆,请阅读:

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

具体来说,第一句话:

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

最后一个:

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