I know that Java has smart/lazy evaluation in this case:
public boolean isTrue() {
boolean a = false;
boolean b = true;
return b || (a &&
In Java (and other C-like languages), this is referred to as short-circuit evaluation.*
And yes, in the second example isATrue is always called. That is, unless the compiler/JVM can determine that it has no observable side-effects, in which case it may choose to optimize, but in which case you wouldn't notice the difference anyway.
I originally suggested that this was quite distinct from lazy evaluation, but as @Ingo points out in comments below, that's a dubious assertion. One may view the short-circuit operators in Java as a very limited application of lazy evaluation.
However, when functional languages mandate lazy-evaluation semantics, it's usually for a quite different reason, namely prevention of infinite (or at least, excessive) recursion.