面试题: &,| 与&&,||的区别?

在开发中,经常会发现代码在进行逻辑判断的时候要么出现&&,要么出现||,几乎没有出现&|这是为什么呢?通俗来讲,自然是哪个好用哪个,也就是哪个效率更好用哪个。

区别:
&&(短路与):&&如果表达式左边为false,结果肯定为false,也就是表达式右边不参与运算。(效率高)
&(与):&如果表达式左边为false,结果肯定为false,但是右边表达式参与了运算

||(短路或):||如果表达式左边为true,结果肯定为true,也就是表达式右边不参与运算。(效率高)
|(或):|如果表达式左边为true,结果肯定为true,但是右边表达式参与了运算

代码演示
&&运算符

public class Test1 {
    public static void main(String[] args) {
        int a = 3;
        int b = 4;
        System.out.println((++a == 3)&&(++b == 4));// false && false =false
        System.out.println("a="+a+",b="+b); // a=4,b=4 ,表达式右边没有进行运算
    }
}

输出: a=4,b=4,表达式左边为false,则右边不参与运算,故b的值没有发生变化

而对于&,如下

public class Test1 {
    public static void main(String[] args) {
        int a = 3;
        int b = 4;
        System.out.println((++a == 3)&(++b == 4));// false & false =false
        System.out.println("a="+a+",b="+b); // a=4,b=5 右边也进行了运算

    }
}

输出: a=4,b=5, 显然两边都进行了运算

||运算符

public class Test1 {
    public static void main(String[] args) {
        int a = 3;
        int b = 4;
        System.out.println((++a == 4)||(++b == 4));// true || false =true
        System.out.println("a="+a+",b="+b); // a=4,b=4 ,显然表达式右边没有进行运算
    }
}

输出: a=4,b=4,表达式左边为true,结果一定为true,则右边不参与运算,故b的值没有发生变化

而对于|,如下

public class Test1 {
    public static void main(String[] args) {
        int a = 3;
        int b = 4;
        System.out.println((++a == 4)|(++b == 4));// true | false =true
        System.out.println("a="+a+",b="+b); // a=4,b=5 右边也进行了运算

    }
}

输出: a=4,b=5, 显然两边都进行了运算.

posted @ 2021-06-22 20:03  JamieChyi  阅读(94)  评论(0)    收藏  举报  来源