多个&&声明 - 效率

时间:2012-10-08 06:23:52

标签: java performance

  

可能重复:
  Does Java evaluate remaining conditions after boolean result is known?

在java中执行包含多个&&语句的代码时,如果第一个语法解析为false,编译器是否会继续解析其他布尔比较?

if (1==2 && 3==4 && 4==5) { Do Something }

一旦确定1==2为false,编译器会立即跳出if语句,还是会继续解析3==44==5之后?

7 个答案:

答案 0 :(得分:2)

&&的情况下,它会在检测到其中一个条件为假时停止评估。这称为short circuit evaluation

答案 1 :(得分:2)

“编程语言中的短路评估”

对于任何逻辑表达式most compiler stop evaluation expression as soon as result evaluated。它的不仅在Java中,而且在几乎所有语言中。 (但不是全部,例如VB6)

您也可以按如下方式检查:

  

i = 0,j = 1;
  i&& ++焦耳;
  system.out.print(“j =”+ j);

j will be 1的值,表示 ++ j未执行。

答案 2 :(得分:1)

  

如果第一个布尔比较解析为假

,编译器会继续解析其他布尔比较

简短的回答。没有!编译器javacJIT静态分析所有代码。它没有像这样的捷径。例如如果第二个条件没有编译,无论第一个条件如何,总是会出现编译错误。

您可能想要问的是;如果第一个或第二个是false,程序将执行其他条件。在这种情况下,它不会。

答案 3 :(得分:1)

这对编译器没有任何影响 - 它只是将布尔比较解析为机器代码,由一个或多个.class文件表示。

就实际运行时而言...如果我从计算机科学课中正确记得,Tarun和Lews的答案都是正确的 - 一旦达到不正确的表达式,比较就会短路。

答案 4 :(得分:0)

如果“1 == 2”为假,则编译器将立即断开if语句。

答案 5 :(得分:0)

&&

- 以上是short-circuit AND operator。如果第一个条件导致错误,则不评估第二个条件。

<强>例如

if ((a==false) && (b==true)){


  }

上述内容将在第一次评估后停止

- 如果您想强制评估两个条件,请尝试Non-Short Circuit AND (&)

答案 6 :(得分:0)

标题中关键字“效率”的旁注: - 如其他答案所述,您的基本问题很容易回答,因此这不是效率问题,而是一个问题,如果您因某种原因需要评估所有表达式例如,当执行改变状态的代码时(这将完全不是编码方式)。

但是如果你在执行速度方面考虑'效率',那么你几乎永远不必在那个级别进行优化,编译器会为你做,或者你不会注意到差异。在某些时候关键操作或在非常大的循环中运行的操作可能很重要,但在几乎所有其他情况下,编写干净的代码更为重要,这样另一个人就可以很好地读取它。