在 Java 中,&
和 &&
都是逻辑运算符,但它们在使用和行为上有一些重要的区别。
1. &
运算符
- 按位与运算符:当应用于整数类型时,
&
是按位与运算符。它对两个操作数的每一位进行与运算,结果的每一位是 1 当且仅当两个操作数的对应位都是 1。 - 逻辑与运算符:当应用于布尔类型时,
&
是逻辑与运算符。它返回true
当且仅当两个操作数都为true
。与&&
不同,&
不具有短路特性,即无论第一个操作数的结果如何,都会计算第二个操作数。
2. &&
运算符
- 逻辑与运算符:
&&
也是逻辑与运算符,但它具有短路特性。这意味着如果第一个操作数为false
,则不会计算第二个操作数,因为整个表达式的结果已经确定为false
。
示例
public class LogicalOperatorsExample {
public static void main(String[] args) {
boolean a = true;
boolean b = false;
// 使用 & 运算符
boolean result1 = a & b; // 结果为 false
System.out.println("a & b: " + result1);
// 使用 && 运算符
boolean result2 = a && b; // 结果为 false
System.out.println("a && b: " + result2);
// 按位与运算符示例
int x = 5; // 二进制表示为 0101
int y = 3; // 二进制表示为 0011
int result3 = x & y; // 结果为 1 (二进制 0001)
System.out.println("x & y: " + result3);
// 短路特性的示例
boolean result4 = a && methodThatThrowsException(); // 不会调用 methodThatThrowsException()
System.out.println("a && methodThatThrowsException(): " + result4);
}
public static boolean methodThatThrowsException() {
throw new RuntimeException("This method throws an exception");
}
}
总结
&
可以用于按位与运算和逻辑与运算,但不具有短路特性。&&
仅用于逻辑与运算,并具有短路特性,可以提高代码的效率和安全性。