java中&&和&以及||和|的区别

>> 饿了么、美团外卖红包领取地址<<

运算符类型不同:

&&和||是逻辑运算符,&和|是位运算符。

在使用上,虽然&和|是位运算符,但是对于逻辑的真假true和false来说,在内存中的表示也是用二进制10来标识的,所以把位运算符当成逻辑运算符来使用也是没有问题的。但是他们有一个短路的区别:

举个例子:funA || funB,在funA为true的情况下,funB的结果无论是true还是false,条件的结果永远是true,所以funB这个函数程序不会去执行。这个就叫做短路求值。类似物理中的电流,当某处短路时,电流直接从短路处通过,而不再走另一条路。

而:funA | funB,情况则不同,因为|是位运算符,所以他需要知道左右两遍的具体值,然后进行位运算,虽然结果总是一样的,但是funA和funB两个函数一定都会被执行。

同理&&和&跟上面的例子类似,下面是一个代码测试:

public class Test {

    public static void main(String[] args) {

        System.out.println(funA(true) || funB(true));
        System.out.println();
        System.out.println(funA(false) || funB(true));
        System.out.println();
        System.out.println(funA(true) | funB(true));

        System.out.println("-----------------------------");

        System.out.println(funA(false) && funB(false));
        System.out.println();
        System.out.println(funA(true) && funB(false));
        System.out.println();
        System.out.println(funA(false) & funB(false));

    }

    public static boolean funA(boolean bool) {
        System.out.println("方法A返回结果" + bool);
        return bool;
    }

    public static boolean funB(boolean bool) {
        System.out.println("方法B返回结果" + bool);
        return bool;
    }

}

执行结果:

方法A返回结果true
true

方法A返回结果false
方法B返回结果true
true

方法A返回结果true
方法B返回结果true
true
-----------------------------
方法A返回结果false
false

方法A返回结果true
方法B返回结果false
false

方法A返回结果false
方法B返回结果false
false

总结:为了方便记忆可以这么理解,&&和||因为比较胖不喜欢走动,所以比较懒学会了投机取巧。而&和|比较勤快,每一次都会中规中矩的按流程办事。


觉得内容还不错?打赏个钢镚鼓励鼓励!!👍

维特丝(vetes)泡沫发蜡喷雾干胶定型弹力素羊毛卷男女保湿蓬松发胶 泡沫发蜡450ml+旅行装99ml
¥34.00
维特丝(vetes)一梳黑染发剂染发梳植物潮色显白遮盖白发自然清水纯黑发焗油男女梳炫彩 自然黑LW00
¥49.00
维特丝(vetes)染发笔遮白补染快速染发天然植物一次性染发棒 一次性染发棒黑色
¥46.00
维特丝 护发精油防毛躁清香玫瑰奇焕亮发干枯烫发卷发直发头发润发护发素男女士 滋养柔顺护发精油100ml
¥36.00