What is the difference between the 'bit-wise AND' and the 'conditional AND' operators?
The & and | operators are defined for two integer operands or two boolean operands. The && and || operators are not defined for anything but two boolean operands. For all other operand types and combinations, a compile-time error shall occur.
The Integer Type Operands
The & operator is the "bit-wise AND" operator and | is the "bit-wise OR" operator. This permits you to manipulate individual bits in a number.
The Boolean Type Operands
The && is the "conditional AND" operator and || is the "conditional OR" operator. The && and || operators are evaluated in short circuit fashion. This means that when you have an expression like:
e1 && e2
if expression e1 evaluates to be false, then the value of the expression e2 is not calculated. Similarly, if e1 evaluates to be true, then the value of e1 || e2 is automatically true, and therefore e2 is not evaluated.
For example, in the expression
x != 0 && 1 / x > x + y // no division by 0
the second part is never evaluated if x equals zero. Thus, 1/x is not computed if x is zero, and no divide-by-zero error can occur.
The & the (unconditional) "logical AND" operator and | is the (unconditional)"logical OR" operator. When applied to boolean values, the & and | operators yield a boolean value. These operators are similar to the && and || operators, except that the & and | operators are not evaluated in "short-circuit" fashion. That is, both operands are first evaluated before computing the result.
For example
class Program {
public static void main(String [] args){
boolean[] b = new boolean[3];
int count = 0;
b[0] = false;
b[1] = false;
b[2] = false;
//The first operand evaluates to false,
//the evaluation of the second operand is skipped.
//Therefor, the count does not add 1.
if (false && b[++count]) {
System.out.println("True -- 1");
}
else {
System.out.println("False -- 1");
}
System.out.println(count);
//Both operands are evaluated. Therefor, the count adds 1
if (false & b[++count]) {
System.out.println("True -- 2");
}
else {
System.out.println("False -- 2");
}
System.out.println(count);
}
}
The output result is
False -- 1
0
False -- 2
1
Most Recent java Faqs
- How to uncompress a file in the gzip format?
- How to make a gzip file in Java?
- How to use Java String.split method to split a string by dot?
- How to validate URL in Java?
- How to schedule a job in Java?
- How to return the content in the correct encoding from a servlet?
- What is the difference between JDK and JRE?
Most Viewed java Faqs
- How to read input from console (keyboard) in Java?
- How to use HttpURLConnection POST data to web server?
- How to add BASIC Authentication into HttpURLConnection?
- How to Retrieve Multiple Result Sets from a Stored Procedure in JDBC?
- What are class variables in Java?
- What are local variables in Java?
- How to Use Updatable ResultSet in JDBC?