任何人都可以帮我解决以下问题:
我的代码如下:
if(cond1 && cond2 && .. && cond10)
这里,cond1是昂贵的操作,其输出是布尔值。
现在我的问题是当cond2输出为假时JAVAC会做什么。具体来说,是评估cond3的输出还是停止评估?
更具说明性,
if(cond1 && cond2 && .. && cond10)
//do this
和
if(cond1){
if(cond2){
.
.
.
if(cond10){
//do this
}
java中的是相同的(在执行方式的情况下)?
答案 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 ..并且其他将不会执行。在另一方面 如果你使用单一&它将从左到右执行,直到处理完所有条件都无关紧要。这就是区别&&将停止对第一个假和&的执行将持续到最后一个条件。