JAVA中&&和&、||和|(短路与和逻辑与、短路或和逻辑或)的区别

 

分析:

1、短路与(&&):所谓短路,就是当参与运算的一个操作数已经足以推断出这个表达式的值的时候,另外一个操作数(有可能是表达式)就不会 执行。短路或(||),同理。

即:对于短路与、短路或而言,只要一个条件可以判断出结果时,另一个条件就不再判断。

2、逻辑与(&):没有上述特性,不管那边的值是如 何,任何参与运算的表达式都会被执行求值,因此也就产生了你代码之中的结果了。

3、ava中逻辑运算短路的理解:

短路” 主要用于逻辑运算符中,即 “ !   && || "这三种运算符
短路 就是知如果左侧的表达式能确定运算后的结果,则不再计算右侧的表达式。
如(1>2)&&(2<3)   明明左侧已经为假 了   ,我 不用计算右侧我一定知道 此表达是为假,这样 就好似物理中的电流,当某处短路时,电流直接从一条路通过,而不再管另一条路。

 看个例子:

public class Logic{
public static void main(String[] args){

int a = 1;
int b = 1;
if(a<b&&b<a++){
System.out.println(a>b&true);
System.out.println(a);
System.out.println("this's in my control");
}
else{
System.out.println("that's impossible");
System.out.println(a);
}

}
}

此处由于a<b为假 ,所以 后面的b<a++不会执行
此处的结果为 
that's impossible
1
若假设a的初值为0,此时a<b成立,这时就要计算后面的值了
结果应该为和上面一样。

网上看见有人对   && 与 & 有点混淆,顺便说说我的理解
本来 & 是个 位运算符
也就是主要用来 做二进制运算的,如 010101&101010 = 000000

但它的特别之处 在于 它可以 进行 boolean值的运算
就像我上面写的   a>b&true 

其实我想这追根究地 在于 boolean 在内存中是用一位二进制来表示的,故可以进行位运算
我们不能被表象所迷惑 ,认为这是逻辑运算 ,这样理解就根本不存在讨论短路的必要了。

 参考原文:https://blog.csdn.net/a_15810201906/article/details/78671976

 

注意点:

1、基本规则

名称                                  语法                                                  特点

短路&&                     条件1&&条件2           两个条件都为True,结果为True,其他为False

逻辑&                         条件1&条件2           两个条件都为True,结果为True,其他为False     

2、使用区别

1、短路&&:如果第一个条件False,第二个条件不做判断,最终结果False,效率高

2、逻辑&:不管第一个条件是否为False,第二个条件都要判断,效率低

3、开发中,我们基本都使用短路&&,效率高

短路或|| 与逻辑或|与以上道理相同,在此不再赘述。

 

posted @ 2021-10-08 09:42  笑傲江湖-令狐冲  阅读(1553)  评论(0编辑  收藏  举报