The boolean operators &&
and ||
should almost always be used instead of &
and |
.
If the right hand side is an expression that has side effects or is expensive to
compute, &&
and ||
will short-circuit but &
and |
will not, which may be
surprising or cause slowness.
If evaluating both operands is necessary for side effects, consider refactoring to make that explicit. For example, prefer this:
boolean rhs = hasSideEffects();
if (lhs && rhs) {
// ...
}
to this:
if (lhs & hasSideEffects()) {
// ...
}
Suppress false positives by adding the suppression annotation @SuppressWarnings("ShortCircuitBoolean")
to the enclosing element.