在实际开发时,开发者常常会更偏爱或者说默认仅仅使用短路与,短路或。 一般情况下是不会有问题的,但是在某些场景下,会因为开发者遗忘的短路语法细节导致程序走向不符合预期的流程。
基础语法
&&(短路与)与 &(非短路与)的区别:
最终结果都是一样的
&& : 具有短路的效果。左边是false,右边直接就不执行
&: 不具有短路的效果。不管左边啥情况,右边都会执行
int x1 = 3;
int y1 = 4;
System.out.println( (++x1 == 3) & (++y1 == 4)); //false & false = false 右侧一定会执行
System.out.println("x1 = " + x1); //x1 = 4
System.out.println("y1 = " + y1); //y1 = 5
int x2 = 3;
int y2 = 4;
System.out.println((++x2 == 3) && (++y2 == 4)); //false (&& 右侧不执行) = false
System.out.println("x2 = " + x2); //x2 = 4
System.out.println("y2 = " + y2); //y2 = 4
||(短路或)与|(非短路或)的区别:
最终的效果都是一样的
||: 具有短路的效果。左边为true,右边直接不执行
|: 不具有短路的效果。不管左边啥情况,右边都会执行
int x1 = 3;
int y1 = 4;
System.out.println((++x1 == 4) | (++y1 == 4)); //true & false = false 右侧必须执行
System.out.println("x1 = " + x1); //x1 = 4
System.out.println("y1= " + y1); //y1 = 5
int x2 = 3;
int y2 = 4;
System.out.println((++x2 == 4) || (++y2 == 4)); //true (|| 右侧不执行) = true
System.out.println("x2 = " + x2); //x2 = 4
System.out.println("y3 = " + y2); //y2 = 4
说明: 在应用与、或条件时,一定要考虑右侧的表达式是否一定要执行。 如果强制要求右侧一定要执行,则用非短路的逻辑运算符。
|