Java-&&评估

时间:2012-04-17 16:54:05

标签: java

任何人都可以帮我解决以下问题:

我的代码如下:

if(cond1 && cond2 && .. && cond10)

这里,cond1是昂贵的操作,其输出是布尔值。

现在我的问题是当cond2输出为假时JAVAC会做什么。具体来说,是评估cond3的输出还是停止评估?

更具说明性,

if(cond1 && cond2 && .. && cond10)
  //do this

if(cond1){
  if(cond2){
         .
         .
         .
        if(cond10){
             //do this
                   }
java中的

是相同的(在执行方式的情况下)?

8 个答案:

答案 0 :(得分:13)

&&运算符始终在false上短路。仅当条件1和2为true时,才会评估条件3。

答案 1 :(得分:4)

如果整个表达式为&&||,则Java将使用短路评估。这意味着如果一切都是&&,它将在第一个假之后停止,如果一切都是||,它将在第一个真假之后停止。

答案 2 :(得分:2)

是的,您的代码段是等效的。逻辑AND运算符是Java短路的。

答案 3 :(得分:2)

一旦发现其中一个值为false,Java就会退出该检查。

同样,一旦发现其中一个值为真,它就会按照你的期望行事。

无需评估其他人。

答案 4 :(得分:2)

一旦遇到错误就会停止(这称为短路逻辑)。在您的情况下,永远不会评估cond3。此外,条件从左到右进行评估,因此将最便宜的条件放在左边总是一个好主意。这样可以避免不必要地评估昂贵的情况。

示例(伪代码)

if(JohnIsMale && IsJohnsCholesterolTooHigh())
   {
   //Tell John to take it easy on the ice cream cause he could develop a heart condition
   }

不要先检查第二个条件,因为它需要进行计算。如果他不是男性(简单的真或假),你将永远不必检查第二个。

答案 5 :(得分:1)

直接回答:是的,它们基本相同。

答案 6 :(得分:1)

它起作用......

if(cond1){ //if its true then check con2 ,else exit
  if(cond2){//if its true then check con 3, else exit
       if(cond3){.....


and Both code snippets  are same 

答案 7 :(得分:1)

&安培;&安培;将被执行从左到右如果任何单个条件为false,则条件将被中断并且整个条件将为false。假设cond2为false,则cond3 ..并且其他将不会执行。在另一方面 如果你使用单一&它将从左到右执行,直到处理完所有条件都无关紧要。这就是区别&&将停止对第一个假和&的执行将持续到最后一个条件。