&与&&,|与||的区别

&(与)、|(或)为位运算符,在Java中是也能做逻辑运算符。
&与&&的区别,先通过以下代码进行比较说明

&

int x = 3,y = 4; boolean b1 = (x++ == 3 & y++==4); //x++==3,x直接与3比较,true,后面继续运行y++==4,同理true,y=5 System.out.println("x:" + x);
System.out.println("y:" + y);
System.out.println(b1);

输出结果:x:4
                 y:5
                 true

&&
 
  
int x = 3,y = 4;
boolean b1 = (x++ == 3 && y++==4); //x++ ==3,x直接与3比较,true,再x++,x=4,后面继续运行y++==4,同理true,y=5 System.out.println("x:" + x);
System.out.println("y:" + y);
System.out.println(b1);

输出结果:x:4
                 y:5
                 true

&

int x = 3,y = 4; boolean b1 = (++x == 3 & y++==4); //x先+1,再比较3,++x=3为false,后面继续运行,所以y++ ==4为false,y=5
System.out.println("x:" + x);
System.out.println("y:" + y); System.out.println(b1);

输出结果:x:4
                 y:5
                 false

&&

 
  
int x = 3,y = 4; boolean b1 = (++x == 3 & y++==4); //x先+1,再比较3,++x==3为false,后面语句不运行,所以y=4
System.out.println("x:" + x);
System.out.println("y:" + y);
System.out.println(b1);

输出结果:x:4
                 y:4
                 false

由此可见,&所连接的语句,无论是true还是false,都会继续运行后面的语句,而&&所连接的语句,如果判断到一个false,后面的语句不运行。所以&&也叫短路运算符。

同理,|(或) 和 ||,运算符,|所连接的语句都需要进行运行判断,||所连接的语句,一旦判断到一个true,则不运行接下来的语句。所以||也是短路运算符。

就效率而言,短路运算符要优于一般逻辑运算符。


你可能感兴趣的:(&与&&,|与||的区别)