Using the same expressions as both arguments to the following binary expressions is usually a mistake:

If 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()) {
  // ...
}