在评估表达式(x==y && a<b)
时,首先计算布尔表达式x==y
,然后评估a<b
。对错????
请解释同样的工作。如果表达的话我很困惑。
答案 0 :(得分:2)
&安培;&安培;运营商从左到右评估
如果首先首先评估x == y然后再评估&lt; b,那么这里有一个问题。 如果x == y的计算结果为假,则无论如何整个表达式都会变为假,因此不会评估&lt; b。这是我们使用&amp;&amp;时获得的基本优化。
如果你想要评估另一个表达式,即使第一个表达式趋于假,我们也可以使用&amp;像
(x==y & a<b)
检查以下示例:
int x=10,y=9,count=0;
if(x==y && ++count == 0){
System.out.println("true");
}
System.out.println(count);
在这种情况下输出为0
int x=10,y=9,count=0;
if(x==y & ++count == 0){
System.out.println("true");
}
System.out.println(count);
在这种情况下输出为1。仔细检查操作员,我们使用&amp;
答案 1 :(得分:2)
对于&&
(条件式和): -
x==y
将首先评估,如果实现,则评估a<b
。作为条件 - 并从左到右进行评估。
如果你只使用&
个操作员: - (和操作员)
在这种情况下,将评估条件。不论第一个条件(左条件)是否失败或通过。
答案 2 :(得分:0)
x==y
,并且只有在其为真的情况下才会评估a<b
答案 3 :(得分:0)
&安培;&安培; (作为AND)和|| (作为OR)首先评估左表达式,只有在需要时才继续评估第二个表达式。
例如:
你也可以使用&amp;和|,它们评估两个表达式。 (如果第二个表达式抛出异常,评估将失败。)如果您需要更快,更安全的评估,请使用&amp;&amp;和||。
答案 4 :(得分:0)
&&
将从左到右进行评估。运算符&&
的左表达式首先被evalutaed,如果它执行为false,则永远不会计算右表达式,如果左表达式为true,则计算右表达式。
答案 5 :(得分:0)
&&
从左到右处理。如果第一个参数为false,则忽略其他参数。当且仅当左边的所有参数都为真时,它才会处理右侧的参数。它被称为short-circuiting。
在您的情况下,如果x==y
为false,则不会评估a<b
。