&表示逻辑与 &&表示短路与
|表示逻辑或 ||表示短路或
虽然他们看起来差不多,但是还是有本质区别的
&与&&
例如: 此时b1与b2都为false
public static void main(String[] args) {
//区分 &与&&
/*
当符号左边是true时,二者都会执行符号右边的运算
当符号左边是false时,&继续执行符号右边的运算。8&不再执行符号右边的运算。会短路
* */
boolean b1 = false;
int num1 = 10;
if(b1 & (num1++) > 0){
System.out.println("小明");
}else {
System.out.println("小红");
}
System.out.println("num1="+num1);
boolean b2 = false;
int num2 = 10;
if(b2 && (num2++) > 0){
System.out.println("小明");
}else {
System.out.println("小红");
}
System.out.println("num2="+num2);
}
此时结果为:
他们结果相同,但是因为&执行了num1++,而&&因为b1已经为false,结果已定,所以不执行num2+++了
相同点:运算结果相同
不同点:
-
当符号左边是true时,二者都会执行符号右边的运算
-
当符号左边是false时,&继续执行符号右边的运算。8&不再执行符号右边的运算。会短路
|与||
相同点:运算结果相同
不同点:
-
当符号左边是false时,二者都会执行符号右边的运算
-
当符号左边是true时,|继续执行符号右边的运算。||不再执行符号右边的运算。会短路
开发中推荐使用&&与|| ,因为他们的效率会比较高。