关于逻辑与(逻辑或)和短路与(短路或)的探讨。
逻辑与(逻辑或)和短路与(短路或)都是逻辑运算符,用符号表示如下:
逻辑与 &
逻辑或 |
短路与 &&
短路或 ||
逻辑与(逻辑或)和短路与(短路或) 计算结果都是一样的,不多说了。那么区别在哪呢。
先以逻辑与和短路与作讨论,看如下代码:
如果把逻辑与改成短路与:
运行结果 :
false
5
看到结果,就不难猜到两者的区别在哪了。如果前者表达式错误,如果使用的逻辑与运算,计算机还会去判断后者的表达式正确与否。如果是短路与,就不会判断后者的表达式。因为无论后者正确与否,都不影响运算出来的结果,短路与就直接跳过这个步骤了。运算也少了一步。
相同的,在或运算情况下,如果前者表达式正确,如果使用的逻辑或运算,计算机还会去判断后者的表达式正确与否。如果是短路或,就不会判断后者的表达式。
虽然结果一样(这结果指逻辑运算的结果,不包括逻辑运算里表达式中的变量可能发生变化),但是使用短路与(或)有可能比逻辑与(或)少做运算。两个表达式的逻辑运算可能看不出什么优越感,如果n个表达式做逻辑运算,如果是短路与,那么第一个表达式错误,就不会去判断下面n-1个表达式了。
这也是为什么,基本所有程序中出现的逻辑运算,都是使用短路与(短路或)。
而且写程序时,在写短路与的时候,尽量把"更会错误的"表达式写在前面。在写短路或的时候,尽量把"更会正确的"表达式写在前面。
逻辑与(逻辑或)和短路与(短路或)都是逻辑运算符,用符号表示如下:
逻辑与 &
逻辑或 |
短路与 &&
短路或 ||
逻辑与(逻辑或)和短路与(短路或) 计算结果都是一样的,不多说了。那么区别在哪呢。
先以逻辑与和短路与作讨论,看如下代码:
public class Test{
public static void main (String args[]){
int i = 5;
int k = 10;
boolean b = i > k & i++ >k; //这一步是关键,这里用到逻辑与;
System.out.println(b);
System.out.println(i);
}
}
运行结果 :
false
6如果把逻辑与改成短路与:
public class Test{
public static void main (String args[]){
int i = 5;
int k = 10;
boolean b = i > k && i++ >k; //这一步是关键,这里用到短路与;
System.out.println(b);
System.out.println(i);
}
}运行结果 :
false
5
看到结果,就不难猜到两者的区别在哪了。如果前者表达式错误,如果使用的逻辑与运算,计算机还会去判断后者的表达式正确与否。如果是短路与,就不会判断后者的表达式。因为无论后者正确与否,都不影响运算出来的结果,短路与就直接跳过这个步骤了。运算也少了一步。
相同的,在或运算情况下,如果前者表达式正确,如果使用的逻辑或运算,计算机还会去判断后者的表达式正确与否。如果是短路或,就不会判断后者的表达式。
虽然结果一样(这结果指逻辑运算的结果,不包括逻辑运算里表达式中的变量可能发生变化),但是使用短路与(或)有可能比逻辑与(或)少做运算。两个表达式的逻辑运算可能看不出什么优越感,如果n个表达式做逻辑运算,如果是短路与,那么第一个表达式错误,就不会去判断下面n-1个表达式了。
这也是为什么,基本所有程序中出现的逻辑运算,都是使用短路与(短路或)。
而且写程序时,在写短路与的时候,尽量把"更会错误的"表达式写在前面。在写短路或的时候,尽量把"更会正确的"表达式写在前面。
本文探讨Java中逻辑与(&)、逻辑或(|)、短路与(||)和短路或(&&)的区别。短路运算符在确保结果确定后不再评估后续表达式,从而节省运算。在实际编程中,为了效率和避免不必要的计算,通常推荐使用短路运算符,并根据表达式的预期结果将更可能导致错误或正确的部分置于前面。

被折叠的 条评论
为什么被折叠?



