逻辑运算符&、|、&&、||

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/weixin_38158541/article/details/85222406

以以下代码为例子:

public class Test {
    public static void main(String[] args){
        int m = 5, n = 5;
        if((m != 5) && (n++ == 5)){}    //短路运算符,若第一个条件为假,后面的就不执行了
        System.out.println("a." + n);      //n=5
        m = n = 5;
        if((m != 5) & (n++ == 6)){}      //非短路运算符,不管第一个表达式是什么,都要执行后面的
        System.out.println("b." + n);   //n=6
        m = n = 5;
        if((m == 5) || (n++ == 5)){}    //短路运算符,若第一个表达式为真,后面的就不执行了
        System.out.println("c." + n);    //n=5
        m = n = 5;
        if((m == 5) | (n++ == 6)){}    //非短路运算符,不管第一个条件是什么,都要执行后面的
        System.out.println("d." + n);   //n=6
        int a = 1, b = 2;
        int c = a & b;             //先转为二进制,再进行&操作,即:0001&0010  结果为0000,即0
        System.out.println("a&b:" + c);
    }
}

解析:“&、|、^”这三个是什么运算符?都会回答“位运算符”,但这样的回答并不完整,其实它还可以充当布尔逻辑运算符(前提是两边的数据类型是布尔类型)

       在位运算中,int c  = a & b 它的意思是首先使a和b按位与,a是1,b是2,a的二进制是0001,b的二进制是0010,与的结果如下:

a       0     0     0    1

b       0     0     1    0

a&b   0     0     0    0

“&、|”与“&&、||”逻辑运算的重要区别是:前者是非短路运算,后者是短路运算,编译器对于&&与||已经优化过,若&&前面的是false,&&后面的表达式就不用再做了,||前面的是true,||后面的就不用再做了,这就是所谓的“短路”,而布尔逻辑运算符就没有这个特点,无论元素符“&、|”前面的是true还是false,运算符后面的表达式都得进行运算,这就是所谓的“非短路”。

猜你喜欢

转载自blog.csdn.net/weixin_38158541/article/details/85222406