&&与&的区分
&&:逻辑与运算符,意为左右两边同时都要满足。有一边不满足则直接不满足。只能对boolean运算。
&:按位与运算符,与数据的二进制数补码有关。补码逐位对齐,同位上下全为1则为1,否则为0。可对数值运算,也可对boolean运算。
public class Test1{
public static void main(String[] args) {
int a = 3 & 2;
System.out.println(a);//3
boolean b = truee,c = false;
if( b && b){
System.out.println(b);//true
}
if( b && c){
System.out.println(c);
}
}
}
输出结果为2 true。
&&两边都为真才可输出
计算a的步骤如下:
||和|的区分
||:逻辑或运算符,意为左右两边只需满足一边。两边不满足才不满足。只能对boolean运算。
|:按位或运算符,与&类似,只需将规则变为:全0则0,否则为1。可对数值运算,也可对boolean运算。
public class Test2{
public static void main(String[] args) {
int a = 3 | 2;
System.out.println(a);//3
boolean b = true,c = false;
if( b || b){
System.out.println(b);//true
}
if( b || c){
System.out.println(c);//false
}
}
}
输出结果为3 true false。
||两边只需满足一边,故b和c都输出。
计算a的步骤如下:
注意
public class Test1{
public static void main(String[] args) {
int f = 10,g = 10;
if( (f=0) ==0 | (g=0) ==0 ){
System.out.println(g);
}
int h = 10,i = 10;
if( (h=0)==0 || (i=0) ==0 ){
System.out.println(i);
}
}
}
以上代码结果中g与i的值并不相同,原因是逻辑运算符从左向右判断,位运算符先将数据转化为补码。
| &和|| &&的区别:
位运算符可以对数值和boolean进行运算,逻辑运算符只能对boolean进行运算。
位运算符不会出现短路现象,而逻辑运算符有短路可能。