可能重复:
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==4
和4==5
之后?
答案 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)
如果第一个布尔比较解析为假
,编译器会继续解析其他布尔比较
简短的回答。没有!编译器javac
和JIT
静态分析所有代码。它没有像这样的捷径。例如如果第二个条件没有编译,无论第一个条件如何,总是会出现编译错误。
您可能想要问的是;如果第一个或第二个是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)
标题中关键字“效率”的旁注: - 如其他答案所述,您的基本问题很容易回答,因此这不是效率问题,而是一个问题,如果您因某种原因需要评估所有表达式例如,当执行改变状态的代码时(这将完全不是编码方式)。
但是如果你在执行速度方面考虑'效率',那么你几乎永远不必在那个级别进行优化,编译器会为你做,或者你不会注意到差异。在某些时候关键操作或在非常大的循环中运行的操作可能很重要,但在几乎所有其他情况下,编写干净的代码更为重要,这样另一个人就可以很好地读取它。