&& || & |都属于逻辑运算符,不过更严格来讲,&和|属于位逻辑运算符,因为&和|可以还参与位运算。
&与 &&的区分
& 通常叫做:按位与
而&&通常叫:逻辑与
首先讲他们的相同点 :都是一假全为假
什么是一假全为假呢?举个例子
c=a&b;
d=a&&b;
上述代码中只有a b同时为true ,c、d才会为true。只要c、d有一个为假,或者c、d都为假,则结果为假。
而&与&&的不同点:
A.&不短路,而&&短路。
什么是短路呢?在java里指的是被阻碍,不能进行下一步。
再次举个例子
c=a&b;
d=a&&b;
求c的运算中,不管什么情况,&两边都要进行运算。而求d的运算中,只要a这边为false,则不用在进行&&右边的b的运算。
B.&可以参与位运算,而&&不可以
举个&参与位运算的例子吧
int a=4;
int b=3;
int c=a&b;
System.out.println(c);
c=a&b的运算步骤:
1.先把a的数值化为2进制,即0100
2.把b的数值化为2进制,即0011
3.
如图列竖式,然后每一列进行&运算,如果那一列全为1(true)即该列的结果为1,否则某一列只要含有0,则该列的结果为0,将得到的结果0000换成十进制,即4&3的结果,为0,所以c=0;
同理|和||的区别(不过|和||是一真全为真,|进行位运算时只要当列含1则该列的结果为1)
对了,在java中 && ||两边只能为boolean类型的值,而&|两边可以同时为boolean类型的值,也可以两边同时为Int类型的值(此时进行位运算)