Boolean values are values that evaluate to either true
or false
, and are represented by the boolean
data type. Boolean expressions are very similar to mathematical expressions, but instead of using mathematical operators such as "+" or "-", you use comparative or boolean operators such as "==" or "!".
[edit] Comparative operators
Java has several operators that can be used to compare variables. For example, how would you tell if one variable has a greater value than another? The answer: use the "greater-than" operator.
Here is a list of the comparative operators in Java:
>
: Greater than
<
: Less than
>=
: Greater than or equal to
<=
: Less than or equal to
==
: Equal to
!=
: Not equal to
To see how these operators are used, look at this example:
 |
Code section 3.37: Comparisons.
-
int a = 5, b = 3;
-
System.out.println(a > b); // Value is true because a is greater than b
-
System.out.println(a == b); // Value is false because a does not equal b
-
System.out.println(a != b); // Value is true because a does not equal b
-
System.out.println(b <= a); // Value is true because b is less than a
|
|
 |
Output for code section 3.37
true
false
true
true
|
|
Comparative operators can be used on any primitive types (except boolean
), but only the "equals" and "does not equal" operators work on objects. This is because the less-than/greater-than operators cannot be applied to objects, but the equivalency operators can.
 |
Specifically, the == and != operators test whether both variables point to the same object. Objects will be covered later in the tutorial, in the "Classes, Objects, and Types" module. |
[edit] Boolean operators
The Java boolean operators are based on the operations of the boolean algebra. The boolean operators operate directly on boolean values.
Here is a list of three common boolean operators in Java:
!
: Boolean NOT
&&
: Boolean AND
||
: Boolean inclusive OR
The boolean NOT operator ("!") inverts the value of a boolean expression. The boolean AND operator ("&&") will result in true if and only if the values on both sides of the operator are true. The boolean inclusive OR operator ("||") will result in true if either or both of the values on the sides of the operator is true.
To show how these operators are used, here is an example:
 |
Code section 3.38: Operands.
-
boolean iMTrue = true;
-
boolean iMTrueToo = true;
-
boolean iMFalse = false;
-
boolean iMFalseToo = false;
-
-
System.out.println("NOT operand:");
-
System.out.println(!iMTrue);
-
System.out.println(!iMFalse);
-
System.out.println(!(4 < 5));
-
System.out.println("AND operand:");
-
System.out.println(iMTrue && iMTrueToo);
-
System.out.println(iMFalse && iMFalseToo);
-
System.out.println(iMTrue && iMFalse);
-
System.out.println(iMTrue && !iMFalse);
-
System.out.println("OR operand:");
-
System.out.println(iMTrue || iMTrueToo);
-
System.out.println(iMFalse || iMFalseToo);
-
System.out.println(iMTrue || iMFalse);
-
System.out.println(iMFalse || !iMTrue);
|
|
 |
Output for code section 3.38
NOT operand:
false
true
false
AND operand:
true
false
false
true
OR operand:
true
false
true
false
|
|
 |
The && and || operators should not be confused with & and | . & and | are both bitwise operators, which are out of the scope of this module. |
Here are the truth tables for the boolean operators:
a |
!a |
true |
false |
false |
true |
a |
b |
a || b |
true |
true |
true |
true |
false |
true |
false |
true |
true |
false |
false |
false |
a |
b |
a && b |
true |
true |
true |
true |
false |
false |
false |
true |
false |
false |
false |
false |
For help on simplifying complex logic, see De Morgan's laws.
In Java, boolean logic has a useful property called short circuiting. This means that expressions will only be evaluated as far as necessary. In the expression (a && b)
, if a is false, then b will not be evaluated because the expression will be false no matter what. Here is an example that shows that the second expression is not automatically checked:
 |
Code section 3.39: Short circuiting.
-
System.out.println((4 < 5) || ((10 / 0) == 2));
|
|
 |
Output for code section 3.39
true
|
|