您的位置:首页 > 其它

啥叫"短路逻辑"

2016-03-28 19:46 375 查看
从Python中的理解:

if a and b:#如果a是false,那么跳过b的判断,结果直接false

if a or b:#如果a为true,那么跳过b的判断,直接true

从Jave中认清逻辑操作符和短路逻辑操作符

一休:愚公,我又碰到问题了,请看下面一段代码:



double value=0;
if(value!=0 && 1/value<1000)
{   System.out.println("The value is not too small.");
}
else
{   System.out.println("The value is too small.");
}




把这段代码放入main方法中,运行结果是:

The value is too small


按道理说应该会出现除数为0的错误,为什么没有出现呢?

愚公:需要注意,这里的条件逻辑操作符”&&”是”短路”操作符,而”
value!=0
“条件不成立,即短路了,应执行else后的语句,所以不会再判断
1/value<1000
了。我再编写几条语句给你看看:

public static void main(String[] args)
{   double int1=0,int2=1,int3=1;
if(int1!=0 & (int2=2)==1)
{   System.out.println("这里没有执行");
}
System.out.println("int2="+int2);
if(int1!=0 && (int3=2)==1)
{   System.out.println("这里没有执行");
}
System.out.println("int3="+int3);
}


读一下这段代码,看看运行结果是什么呢?

一休:还真的有点难读呢!

愚公:把你聪明的大脑当成计算机,一步步执行看看。

一休:哦,首先是一组赋值”
int1=0,int2=1,int3=1
;”,然后条件判断”
value!=0
“,现在int1等于0,于是碰到”&”号。

愚公:碰到”&”号要继续判断后面的表达式。

一休:然后执行int2=2,它的值就变成了2,再判断int2==1,两个条件都不满足,所以不执行”
System.out.println("这里没有执行");
“语句。

愚公:那么
System.out.println("int2="+int2)
输出什么呢?

一休:是”
int2=2.0
“。

愚公:再看看语句
if(int1!=0 && (int3=2)==1)


一休:”
int1!=0"
不满足,那么”&&”后面的条件就不用考虑了。”(int3=2)”没有执行,所以,
System.out.println("int3="+int3)输出"int3=1.0
“。

愚公:对了。

一休:那”||”也是如此吧?

愚公:是的,现在总结一下。

逻辑操作符有:&(与运算)、^(异或运算)、|(或运算)。

短路逻辑操作符有:&&(并且)、||(或者)。

短路与(或)运算符和逻辑与(或)一样,都可以实现逻辑运算,但是有一个重要的区别:利用逻辑与(或)运算时,不管操作符两边的条件表达式成不成立,它都要进行运算判断,而短路与(或)运算就不一样了,如果通过左侧的操作数就可以进行它们需要的判断,那么它就不会再计算右侧的操作数了。

一休:这下我全明白了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: