Difference Bitwise AND (&) and Logical AND (&&) in Java

2025年6月23日 | 阅读 5 分钟

在Java中,& (按位AND) 和 && (逻辑AND) 运算符具有不同的用途和行为。尽管这两个运算符都涉及AND的概念,但它们应用于不同的上下文。

按位AND (&) 运算符

单个AND运算符 (&) 被称为按位AND运算符。它的目的是在两个操作数之间执行逐位比较。它操作操作数的二进制表示,并接受两个操作数。它直接操作整数类型(int、long、byte)或布尔值的位,对于底层编程任务非常有用。它通常与整数类型(int、long、byte)或布尔值一起使用。

语法

仅当两个操作数都为true时,运算符才返回true,否则返回false。按位AND运算符的真值表如下。

aba&b
FFF
FTF
TFF
TTT

其中 T/t 表示 TRUE/ true,F/f 表示 FALSE/ false。

按位AND (&) 运算符的示例

a = 00001010

b = 00001011

a&b = 00001010

Java程序:使用按位AND (&) 运算符

示例

编译并运行

输出

Bitwise AND of 12 and 6 is 4

按位AND (&) 运算符的用例

  • 位掩码:使用掩码隔离特定位。
  • 奇偶校验:识别奇数/偶数。
  • 底层编程:设备驱动程序、嵌入式系统。

逻辑AND (&&) 运算符

双AND运算符 (&&) 被称为逻辑AND运算符。它们组合两个布尔表达式并产生布尔结果。它们操作操作数的逻辑真值,并用于布尔表达式以执行短路求值。

如果第一个操作数为false,则第二个操作数不被求值,因为结果必然为false。

语法

boolean result = operand1 && operand2;

仅当两个操作数都为true时,运算符才返回true,否则返回false。按位AND运算符的真值表如下。

aba&&b
TTT
TFF
FTF
FFF

逻辑AND (&&) 运算符的示例

a = 00001010

b = 00001011

a&&b = 00001010

Java程序:使用逻辑AND (&&) 运算符

示例

编译并运行

输出

operator1 && operator2: false

逻辑AND (&&) 运算符的用例

  • 控制流:经常在条件语句中使用,以整合多个条件。
  • 一旦结果已知就停止的求值称为短路求值。

示例:同时使用按位AND (&) 和逻辑AND (&&)

示例

编译并运行

输出

8
True

& 和 && 运算符的区别

& 和 && 运算符之间的关键区别在于 && 支持短路求值,而 & 运算符不支持。

另一个区别是,如果 op1 为 false,&& 会立即求值 op1 并返回 false。& 运算符在返回答案之前始终会求值两个操作数(op1 和 op2)。

序号。基础& 运算符&& 运算符
1运算符它是一个按位AND运算符。它是一个逻辑AND运算符。
2目的它执行逐位比较。它组合布尔表达式。
3操作数它可以应用于整数和布尔类型。它只能与布尔类型一起使用。
4求值它总是求值两个操作数。它执行短路求值。
5用途它用于位操作、布尔比较、位掩码、奇偶校验等。它用于条件逻辑,组合布尔条件。
6结果它可能产生一个整数和一个布尔值。它只产生一个布尔类型。
7示例z = x & yif (y > 1 && y > x)

结论

我们应该使用按位AND (&) 进行位操作,例如设置、清除或测试整数中的特定位。另外,当我们想对两个布尔变量执行AND操作时也使用它。

当我们需要组合布尔表达式并且当第一个表达式为 false 时避免不必要的第二个表达式求值时,请使用逻辑AND (&&) 运算符进行条件逻辑。

注意:虽然 & 可用于布尔操作数,但由于其短路行为可以提高性能并防止错误,因此 && 是逻辑操作的首选。

按位AND (&) 和逻辑AND (&&) 选择题

1. Java中 & 和 && 的关键区别是什么?

  1. & 仅用于整数
  2. && 总是对两边进行求值
  3. & 对两边进行求值,即使第一边是false
  4. && 是按位运算符
 

答案:c)

解释: & 对两个操作数进行求值,而 && 在第一个为 false 时进行短路。


2. 这段代码的输出是什么?

  1. 2
  2. 3
  3. 6
  4. 0
 

答案: a)

解释: 6 的二进制是 110,3 的二进制是 011。6 & 3 的按位AND结果是 010 = 2。


3. 以下哪项适用于短路求值?

  1. true & methodCall()
  2. false && methodCall()
  3. true && methodCall()
  4. B 和
 

答案: d)

解释: false && ... 会跳过方法调用。true && ... 会对其进行求值。


4. 以下哪个运算符用于控制流?

  1. 逻辑与
  2. 按位与
  3. 逻辑AND和按位AND
  4. 以上都不是
 

答案: a)

解释:逻辑AND运算符经常在条件语句中使用,以整合多个条件。


5. 位掩码可以使用 __________ 运算符执行。

  1. 逻辑与
  2. 按位与
  3. 逻辑AND和按位AND
  4. 以上都不是
 

答案: b)

解释:我们可以使用按位AND运算符来隔离特定位,并利用掩码。