0 写在前面
JAVA中有两个短路运算,一个是短路与,一个是短路或。
所谓短路,就是当一个参与运算的操作数足以推断该表达式的值时,另一个操作数(可能是表达式)就不会执行。
1 介绍
短路与:&&
短路或:||
应用:
-------------------------------------------
两个:(逻辑1 && 逻辑2)
多个:(逻辑1 && 逻辑 2 && 逻辑3 &&……)
-------------------------------------------
两个:(逻辑1 || 逻辑2)
多个:(逻辑1 || 逻辑 2 || 逻辑3 ||……)
-------------------------------------------
2 举例
逻辑与、逻辑或都是自作向右计算。
2.1 逻辑与 &&
两边同时为true,则为true。
有一方为false,则为false。
左边为false,右边不执行,为false。
如果第一个操作数已经能够确定表达式为false,则自动停止,第二个就不再进行运算判断。
举例:
int a = 3;
int b = 3;
System.out.println(a++ == 10 && ++b == 10);//false
System.out.println(a);//4
System.out.println(b);//3
}
结果为false。
因为a++的运算为先使用a的值再自加,所以3==10的结果为false,那么第一个表达式为false时在短路与中,第二个表达式不执行;
没走到第二个表达式,那么b也就没运算,b得值还是3;
2.2 逻辑或 ||
两边同时为false,则为false。
有一方为true,则为true。
左边为true,右边不执行,为true。
如果第一个操作数已经能够确定表达式为true,则自动停止,第二个就不再进行运算判断。
int x = 3;
int y = 3;
System.out.println(x++ == 3 || ++y==10);//true
System.out.println(x);//4
System.out.println(y);//3
结果为true。
因为x++的运算为先使用x的值再自加,所以3==3的结果为true,那么第一个表达式为true时在短路或中,第二个表达式不执行;
没走到第二个表达式,那么y也就没运算,y得值还是3;
3 小技巧
使用逻辑运算可以避免一些小错误,例如在java中被除数是0的话,会引发一些问题。
使用逻辑与则可以避免这个错误:
x!=0 && y/x > 3
此段代码说的是,如果x不等于0,才会将x作为被除数。
还有许多小技巧,碍于篇幅不列举了,可以自行探索一下。
4 写在最后
关于短路运算有一个口诀可以记一下:
逻辑与-->一假则假,全真才真
逻辑或-->一真则真,全假才假
实际开发中逻辑的应用还是比较多的。