&(与)、|(或)为位运算符,在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,则不运行接下来的语句。所以||也是短路运算符。
就效率而言,短路运算符要优于一般逻辑运算符。