Java中&和&&都可以表示逻辑与运算,但是它们之间也有区别。

1) 都可以表示逻辑与运算:&&表示短路与,例如 a&&b,a表达式为false,则不进行b表达式的判断;而 a&b 表达式中,不论a表达式是否false都需要进行b表达式的判断。我们通过以下的例子来说明:

public static boolean checkNumber(int i){
	if (i<5) {
		System.out.println("小于5");
		return true;
	}
	System.out.println("判断"+i);
	return false;
}
public static void main(String[] args) {
	int i=6;
	if(checkNumber(i) & checkNumber(i)){
		System.out.println("逻辑与&");//逻辑与,都要判断
	}
	i=7;
	if (checkNumber(i) && checkNumber(i)){
		System.out.println("逻辑与&&"); //逻辑与
	}
	
	System.out.println(i);
}

测试一下

输出结果:

判断6
判断6
判断7
7

 从上面的输出结果中我们可以看出

  • checkNumber(i) & checkNumber(i) 中第一个表达式返回false,第二个表达式仍旧执行。
  • checkNumber(i) && checkNumber(i) 中第一个表达式返回false,第二个表达式不再执行。

2) &可用于位运算,当左右两边的条件不是布尔型,而是数字时,它会进行位运算。

int i = 123 & 321;
System.out.println(i);