Why doesn\'t func3 get executed in the program below? After func1, func2 doesn\'t need to get evaluated but for func3, shouldn\'t it?
if (func1() || func2()
Java functions are evaluated according to precedence rules
because "&&" is of higher precendence than "||", it is evaluated first because you did not have any brackets to set explicit precedence
so you expression of
(A || B && C)
which is
(T || F && F)
is bracketed as
(T || (F && F))
because of the precedence rules.
Since the compiler understands that if 'A == true' it doesn't need to bother evaluating the rest of the expression, it stops after evaluating A.
If you had bracketed ((A || B) && C)
Then it would evaluate to false.
EDIT
Another way, as mentioned by other posters is to use "|" and "&" instead of "||" and "&&" because that stops the expression from shortcutting. However, because of the precedence rules, the end result will still be the same.