I know that Java has smart/lazy evaluation in this case:
public boolean isTrue() { boolean a = false; boolean b = true; return b || (a &&
Yes isATrue() will be called because you are calling it explicitly in line boolean a = isATrue();
isATrue()
boolean a = isATrue();
But it won't be called in following case if isBTrue() returns true:
isBTrue()
true
public boolean isTrue() { return isBTrue() || isATrue(); }