1.&和&&的区别
共同点:两者都可以用作逻辑与运算符and,当运算符两边的表达式都为true时候整个结果才是true,但当运算符有一边是false时,那么整个结果就是false。
代码演示:
if(true & false) {
System.out.println("true & false");
}
if(true && false) {
System.out.println("true && false");
}
if (true & true ) {
System.out.println("true & true");
}
if(true && true) {
System.out.println("true && true");
}
结果是:
true & true
true && true
由结果我们可以知道&和&&都可以当做逻辑与运算符。
区别:
& 按位与操作,按二进制位进行"与"运算。
&&具有短路功能,就是&& 先算 &&运算符的左侧表达式,若左侧为 false 那么右侧就不运算了。而&必须将两侧都运算出来,才会计算出最终的结果。
& 按位与操作:
0x01 & 0x0f =>1
0x02 & 0x0f =>2
&&的短路功能:
public class TandF {
public static boolean tAndF( ) {
System.out.println("我执行了!");
return true;
}
public static void main(String[] args) {
System.out.println(false & tAndF());
System.out.println("-------------");
System.out.println(false && tAndF());
}
}
结果是:
我执行了!
false
-------------
false
由上面的结果我们知道当使用&时候必须执行&两边的表达式,而使用&&时,若左边是false时,就直接得到false。
2. | 和 || 的区别
| 和 || 的共同点:
| 和 || 的区别和上面的同理,都可以作为逻辑或运算符;
| 和 || 的区别:| 还可以作为按位或的运算符,运算规则与按位与同理;
|| 同样有类似短路的功能,即第一个条件若为true,则不计算后面的表达式。