Alternate names: SelfEquality
Using the same expressions as both arguments to the following binary expressions is usually a mistake:
a && a, a || a, a & a, or a | a is equivalent to aa <= a, a >= a, or a == a is always truea < a, a > a, a != a, or a ^ a is always falsea / a is always 1a % a or a - a is always 0If the expression has side-effects, consider refactoring one of the expressions with side effects into a local. For example, prefer this:
// check twice, just to be sure
boolean isTrue = foo.isTrue();
if (isTrue && foo.isTrue()) {
// ...
}
to this:
if (foo.isTrue() && foo.isTrue()) {
// ...
}
Suppress false positives by adding the suppression annotation @SuppressWarnings("IdentityBinaryExpression") to the enclosing element.