首先,短路问题存在于逻辑运算中,即一旦能够确定整个表达式的boolean值,就不会再执行表达式剩余的部分了,我们称此现象为短路。
代码示范:
public class ShortCircuit {
static boolean test1(int val){
System.out.println("test1("+ val +")");
System.out.println("result:"+(val<1));
return val<1;
}
static boolean test2(int val){
System.out.println("test2("+val+")");
System.out.println("result:"+(val<2));
return val<2;
}
static boolean test3(int val){
System.out.println("test3("+val+")");
System.out.println("result:"+(val<3));
return val<3;
}
public static void main(String[] args){
boolean b=test1(0)&&test2(2)&&test3(2);
System.out.println("expression is "+b);
System.out.println("--------------------------------");
boolean c=test1(0)||test2(2)||test3(2);
System.out.println("expression is "+c);
}
}
运行结果如图所示:
这就是短路问题,在Boolean值判断的过程中&&(与)||(或)会出现短路问题 总结如下: &&(与):a && b && c,如果说a的boolean值为:false,不论b与c的boolean值如何,后边语句将不再执行,如果a=ture,b=false,那么c将不会执行。 ||(或):a || b || c,如果说a的boolean值为:ture,不论b与c的boolean值如何,后边的语句将不再执行,如果a=false,b=ture,那么c将不会执行。 因此,在写代码的时候要注意,要避免出现短路现象而导致某些一些代码块没有执行,另外短路现象本身不是bug,这是为了提升Java的性能而出现的短路。
原因:在&&(||)中只需要出现一个是false(ture)的值,我们就能确定整个表达式的boolean值,因此后边的表达式如何并不影响整个表达式的boolean,自然也就不被执行了。