在开发中,经常会发现代码在进行逻辑判断的时候要么出现&&
,要么出现||
,几乎没有出现&
和|
这是为什么呢?通俗来讲,自然是哪个好用哪个,也就是哪个效率更好用哪个。
区别:
&&(短路与)
:&&如果表达式左边为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, 显然两边都进行了运算.