&既是逻辑运算符,又是位运算符,当&作为逻辑运算符时属于非短路型,而&&只是短路型逻辑运算符
&和&&都可以用作逻辑与的运算符,表示逻辑与(and),当运算符两边的表达式的结果都为true时,整个运算结果才为true,否则,只要有一方为false,则结果为false。
&&还具有短路的功能,即如果第一个表达式为false,则不再计算第二个表达式,例如,对于if(str != null && !str.equals(“”))表达式,当str为null时,后面的表达式不会执行,所以不会出现NullPointerException如果将&&改为&,则会抛出NullPointerException异常。
下面举个例子
public class Test{
public static void main(String[] args){
int a=3,b=4; //声明两个变量
boolean flag;
flag=(a>2)&&(b++>2); //"&&"运算符左侧运算结果为true,右侧表达式被运算(b>4也是true)
System.out.println("flag="+flag); //输出结果:flag=true
System.out.println("b="+b); // 输出结果:b=5
b=4; //重置变量b的值
flag=(a>5)&&(b++)>2); //"&&"运算符左侧运算结果为false,右侧表达式不被运算
System.out.println("flag="+flag); //输出结果:flag=false
System.out.println("b="+b); // 输出结果:b=4
}
}
public class Test{
public static void main(String[] args){
int a=3,b=4; //声明两个变量
boolean flag;
flag=(a>2)&(b++>2); //"&"运算符左侧运算结果为true,右侧表达式被运算(b>4也是true)
System.out.println("flag="+flag); //输出结果:flag=true
System.out.println("b="+b); // 输出结果:b=5
b=4; //重置变量b的值
flag=(a>5)&(b++)>2); //"&"运算符左侧运算结果为false,右侧表达式仍然被运算
System.out.println("flag="+flag); //输出结果:flag=false
System.out.println("b="+b); // 输出结果:b=5
}
}
&&和||用法一样,&和|用法一样
public class test
{
public static void main(String [] args)
{
int month=8;//声明变量month,并赋8
int day=1;//声明变量day,值为1
if((month==8)||(++day<15))
System.out.println("Month="+month+"Day="+day);
if((month==8)|(++day<15))
System.out.println("Month="+month+"Day="+day);
}
} //End
执行的结果是:
Month=8 Day=1
Month=8 Day=2
|