Understanding the Dual Nature of the & Operator
In Java, the & operator performs bitwise AND operations on integers. However, it can also be used for logical AND operations, leading to confusion about its true nature.
To clarify, the & operator is internally overloaded. In the case of boolean operands, it performs a logical AND operation. This means it evaluates both operands, determining whether they are both true before returning the result.
On the other hand, when the & operator is used with integer operands, it performs a bitwise AND operation. This involves comparing individual bits of the two operands and returning a new integer where each bit is the result of the corresponding bitwise AND operations on the input bits.
How It Works
To understand the difference between logical and bitwise AND operations, consider the expressions:
(x != 0) & (1/x > 1) (x != 0) && (1/x > 1)
Using the logical AND operator (&), both operands are evaluated regardless of the result of the first operand. This means that if x = 0, the expression will throw an error because it attempts to divide by zero.
Using the bitwise AND operator (&), however, the second operand is only evaluated if the first operand is true. This means that if x = 0, the expression will evaluate to false without attempting to divide by zero.
Similar Behavior with Logical OR
The same principle applies to the logical OR operator (|). The expression exprA | exprB evaluates both operands regardless of the result of the first operand, while exprA || exprB only evaluates the second operand if the first operand is false.
Conclusion
While the & operator has both logical and bitwise functionality, the distinction between the two operations is crucial. Logical AND always evaluates both operands, while bitwise AND avoids evaluating the second operand if the first operand is false. Similarly, logical OR evaluates both operands, while bitwise OR avoids evaluating the second operand if the first operand is true.
The above is the detailed content of Java's & Operator: Bitwise AND or Logical AND – When Does It Do What?. For more information, please follow other related articles on the PHP Chinese website!