逻辑运算符&&和||的短路运算
先看一段代码:
public class Main {
public static void main(String[] args) {
//短路运算
int a = 4;
boolean b = (a<3)&&(a++<10);
System.out.println(b);
System.out.println(a);
b = (a>1)||(a++<10);
System.out.println(b);
System.out.println(a);
}
}
很简单的一段代码,初学者的第一反应一般都是,第一遍b、a的输出值是false和5,第二遍是true和6,下面我们来看看程序运行结果:
和我们预期似乎不一样,两次a++,a的值居然都没有改变,这是为什么呢?这个现象叫做&&和||的短路运算,试想一下,我们手动计算 a&&b 这样的式子时,先算a,再算b,当已经得出a的值为false时,我们还需要算b吗?自然是不需要的,因为&&式两边任一为false时,&&式值一定为false。同理当我们已经得出 a||b 式左式为true,我们自然也不用再去计算右式,因为此时||式已经必然为true了,聪明的Java语言设计者自然也想到了这个问题,因此在制定逻辑运算符&&,||的运算规则时,便规定了只要a&&b式中,只要a式为false,则b式将不会被执行,a&&b的结果为false;而对于a||b,只要a式为true,b式将不会被执行,a||b的结果为true。
一言以蔽之,Java语言在进行逻辑运算时,只要能提前确定结果,就不会再执行后面的代码了,而是直接将结果返回,这样规定,能避免计算机做无用功,提高了程序执行效率。
Java、C、Python、应该所有的程序设计语言都有短路运算吧,毕竟只是语言设计者的举手之劳,就能让逼格更高,能给出肯定回答或者举出反例的可以在评论区留言。