啥叫"短路逻辑"
2016-03-28 19:46
375 查看
从Python中的理解:
if a and b:#如果a是false,那么跳过b的判断,结果直接false
if a or b:#如果a为true,那么跳过b的判断,直接true
从Jave中认清逻辑操作符和短路逻辑操作符
一休:愚公,我又碰到问题了,请看下面一段代码:
…
…
把这段代码放入main方法中,运行结果是:
按道理说应该会出现除数为0的错误,为什么没有出现呢?
愚公:需要注意,这里的条件逻辑操作符”&&”是”短路”操作符,而”
读一下这段代码,看看运行结果是什么呢?
一休:还真的有点难读呢!
愚公:把你聪明的大脑当成计算机,一步步执行看看。
一休:哦,首先是一组赋值”
愚公:碰到”&”号要继续判断后面的表达式。
一休:然后执行int2=2,它的值就变成了2,再判断int2==1,两个条件都不满足,所以不执行”
愚公:那么
一休:是”
愚公:再看看语句
一休:”
愚公:对了。
一休:那”||”也是如此吧?
愚公:是的,现在总结一下。
逻辑操作符有:&(与运算)、^(异或运算)、|(或运算)。
短路逻辑操作符有:&&(并且)、||(或者)。
短路与(或)运算符和逻辑与(或)一样,都可以实现逻辑运算,但是有一个重要的区别:利用逻辑与(或)运算时,不管操作符两边的条件表达式成不成立,它都要进行运算判断,而短路与(或)运算就不一样了,如果通过左侧的操作数就可以进行它们需要的判断,那么它就不会再计算右侧的操作数了。
一休:这下我全明白了。
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“。
愚公:对了。
一休:那”||”也是如此吧?
愚公:是的,现在总结一下。
逻辑操作符有:&(与运算)、^(异或运算)、|(或运算)。
短路逻辑操作符有:&&(并且)、||(或者)。
短路与(或)运算符和逻辑与(或)一样,都可以实现逻辑运算,但是有一个重要的区别:利用逻辑与(或)运算时,不管操作符两边的条件表达式成不成立,它都要进行运算判断,而短路与(或)运算就不一样了,如果通过左侧的操作数就可以进行它们需要的判断,那么它就不会再计算右侧的操作数了。
一休:这下我全明白了。
相关文章推荐
- MFC子窗口和父窗口
- hdu 1014 Uniform Generator 数论
- 推荐系统简单介绍
- 抽象
- poj 2104 K-th Number
- img与容器下边界的空隙(缝隙) img与div(block类型元素)下边界有距离(或者叫缝隙、空隙)的解决方法
- 为某个软件分配管理员权限
- 第四周总结
- 第5周-项目2-游戏中的角色类(2)
- HDOJ 5650-so easy
- OC特有的方法(点语法,)
- 三角形1
- 顺序表的基本操作(new)
- 10GBase-T标准
- bzoj4246 两个人的星座 计算几何
- (转载)HOG特征(Histogram of Gradient)总结
- Java产生唯一的随机数
- 托普进销存 智慧版v1.3.0
- 可变数据结构的编程
- hdu 1260 Tickets (dp)