&与&&的区别:
&:不管左边是true还是false,右端都会进行运算。
&&:只要左端不满足条件(即为false),右端就不会进行运算。
建议运算时,多使用&&(短路与),这样一方面可以减少不必要的开销,节省计算,另一方面可以规避错误
同理可得,|(逻辑或)和||(短路或)也存在上述区别。
class Test{
public static void main(String[] args){
boolean a=true;
boolean b=false;
int i1=10;
if(b&(i1++)>0){
System.out.println("今天天气很晴朗");
}else{
System.out.println("难得没有雾霾");
}
System.out.println(i1);
int i2=10;
if(b&&(i2++)>0){
System.out.println("今天天气很晴朗");
}else{
System.out.println("难得没有雾霾");
}
System.out.println(i2);
}}
其运算结果如图所示:
在if(b&(i1++)>0)中,b为false,但是&(逻辑与)还是将(i1++)>0进行运算,所以输出数值为11。
if(b&&(i2++)>0)中,b为false,使用&&(短路与),则不需要运算其右端,直接跳出判断语句,输出i2原来的值。
以下例子则可以证明,&&(短路与)可以用来规避错误:
class Test{
public static void main(String[] args){
boolean a=true;
boolean b=false;
int i1=10;
if(b&10/0==0){
System.out.println("今天天气很晴朗");
}else{
System.out.println("难得没有雾霾");
}
System.out.println(i1);
}}
其运算结果如图:
由if(b&10/0=0)的后半部分(10/0==0)会导致发生错误。
class Test{
public static void main(String[] args){
boolean a=true;
boolean b=false;
int i2=10;
if(b&&10/0==0){
System.out.println("今天天气很晴朗");
}else{
System.out.println("难得没有雾霾");
}
System.out.println(i2);
}}
其运算结果如图:
由此可得,if(b&&10/0==0)中,&&(短路与)可以规避错误。