Actual java code is:
((rrd == null || !rrd)
&& null != dam
&& null != dam.getac()
&& null != dam.getac().getc()
&& null != sname
&& sname.equalsIgnoreCase(dam.getac().getc()))
But when I look into class file it's:
((rrd != null) && (rrd.booleanValue()))
|| ((((null == dam)
|| (null == dam.getac())
|| (null == dam.getac().getc())
|| (null == sname)
|| (!(sname.equalsIgnoreCase(dam.getac().getc()))))))
All ||
and &&
interchanged.
Can anyone explain why?
The expressions are not equivalent but inverted. It looks like the compiler avoids an outer (or implied) not here.
Note that short-circuiting is possible for both operations, ||
and &&
-- in the first case when a true sub-expression is encountered and in the second case when a false sub-expression is encountered. So the ability to short-circuit alone does not explain this.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With