&&和||之间的区别
我不明白&&和||之间的区别 在某种程度上。
If(a && b) { then do this }
现在,如果a为假,则查看b,但不测试条件。
但….
If(a || b) { then do this }
现在,如果a为真,则b 未查看,并且未测试条件。
为什么是这样。 我想到了&&和||的目的 是为了帮助提高速度。 如果它可以通过测试第一个条件来确定结果,则不需要查看第二个条件。 但在&&的情况下,它确实看着它。 而在||的情况下 它很有意义。
我有这个权利吗? 如果我这样做,为什么会这样?
要理解答案,请提醒自己AND
和OR
操作的真值表:
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),但仅在其左侧操作数的值为真时才计算其右侧操作数。
最后一个:
因此,&&计算与布尔操作数相同的结果。 它的不同之处仅在于有条件地而不是总是评估右侧操作数表达式。