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

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


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