&&和||之间的区别

rag*_*ull 1 java

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

If(a && b) { then do this }
Run Code Online (Sandbox Code Playgroud)

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

但....

If(a || b) { then do this }
Run Code Online (Sandbox Code Playgroud)

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

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

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

das*_*ght 7

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

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


   OR  true   | false
     \--------+-------
true  | true  | true
------+-------+-------
false | true  | false
Run Code Online (Sandbox Code Playgroud)

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

我想到了&&和||的目的 是为了帮助加快速度.

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

if (s == null) return false;
if (s.length() == 0) return false;
Run Code Online (Sandbox Code Playgroud)

你可以写的原因

if (s == null || s.length() == 0) return false;
Run Code Online (Sandbox Code Playgroud)

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


Sud*_*udi 5

&&用于执行and操作意味着如果其中任何一个expression/condition评估结果为假,则整个事情都是假的。

so if any one of the condition becomes false it won't even continue further to check 
Run Code Online (Sandbox Code Playgroud)

||or如果其中任何一个 expression/condition评估结果为真,则用于执行操作,整个事情变为真。

so it continues till the end to check atleast one condition to become true.
Run Code Online (Sandbox Code Playgroud)

  • 嗯...仔细阅读他的问题。 (2认同)