java中&与&&,|及||的区别
一、&与&& 的区别
&:& 既是位运算符又是逻辑运算符,&的两侧可以是int,也可以是boolean表达式,当&两侧是int时,要先把运算符两侧的数转化为二进制数再进行运算(如果相对应位都是1,则结果为1,否则为0),而短路与(&&)的两侧要求必须是布尔表达式。
实例1:按位与,两边都是int类型
int a = 60; /* 60 = 0011 1100 */
int b = 13; /* 13 = 0000 1101 */
int c = 0;
c = a & b; /* 12 = 0000 1100 */
实例2:逻辑与,两边都是boolean类型,两边都为true才为true。
boolean a = true;
boolean b = true;
boolean c = false;
boolean f = false;
boolean d = a & b;
boolean e = a & c;
boolean g = f & c;
boolean h = f & a;
System.out.println(d); //true
System.out.println(e); //false
System.out.println(g); //false
System.out.println(h); //false
&&:短路与,就是说&& 左边的值为false的时候后面的就不运行,两边都为true才为true。
实例3:短路与,&&两边都必须是boolean类型
boolean a = true;
boolean b = true;
boolean c = false;
boolean f = false;
boolean d = a && b;
boolean e = a && c;
boolean g = f && c;
boolean h = f && a;
System.out.println(d); //true
System.out.println(e); //false
System.out.println(g); //false
System.out.println(h); //false
二、|与||的区别
|:与&一样,当|两侧是int时,要先把运算符两侧的数转化为二进制数再进行运算(同为0时为0,否则为1),而短路或(||)的两侧要求必须是布尔表达式。
实例1:按位或,两边都是int类型
int a = 60; /* 60 = 0011 1100 */
int b = 13; /* 13 = 0000 1101 */
int c = 0;
c = a | b; /* 122 = 0011 1101 */
实例2:逻辑或,两边都是boolean类型,有一true则为true,两边都为false才为false。
boolean a = true;
boolean b = true;
boolean c = false;
boolean f = false;
boolean d = a | b;
boolean e = a | c;
boolean g = f | c;
boolean h = f | a;true
System.out.println(d); //true
System.out.println(e); //true
System.out.println(g); //false
System.out.println(h); //true
|| : 短路或,就是说|| 左边的值为true的时候后面的就不运行,两边都为false才为false。
实例3:短路或,&&两边都必须是boolean类型
boolean a = true;
boolean b = true;
boolean c = false;
boolean f = false;
boolean d = a || b;
boolean e = a || c;
boolean g = f || c;
boolean h = f || a;
System.out.println(d); //true
System.out.println(e); //true
System.out.println(g); //false
System.out.println(h); //true