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.