File APIs for Java Developers
Manipulate DOC, XLS, PPT, PDF and many others from your application.
The moose likes Programmer Certification (SCJP/OCPJP) and the fly likes short-circuit question Big Moose Saloon
  Search | Java FAQ | Recent Topics | Flagged Topics | Hot Topics | Zero Replies
Register / Login
JavaRanch » Java Forums » Certification » Programmer Certification (SCJP/OCPJP)
Bookmark "short-circuit question" Watch "short-circuit question" New topic

short-circuit question

Grady Jamyson
Ranch Hand

Joined: Aug 04, 2002
Posts: 42

I think,

1) a = true is evaluated, so a = true
2) b = true is not evaluated, so b = false (short-circuit)
3) the original expresion would be, boolean x = true && (c = true)
4) c = true is evaluated, so c = true
5) boolean x = true

But the answer is, a = true, b = false, c = false
Any ideas?
Thanks a lot.
Kitty Dayal
Ranch Hand

Joined: Jul 22, 2004
Posts: 89
Hey Grady,

It actually works this way.

op1 || op2 where op1, op2 are two operands.

if op1 is "true" then op2 will not be evaluated, EVEN IF op2 is an expression (in this case (b=true) && (c=true)).
Similarly for &&, if op1 is false then op2 is not evaluated at all.

One more point to note is both ||, && have same level of precedence and so if they appear in a expression, they will be evaluated as usually (from left-right).


Here it will be evaluated as (false || (true && (true || false))) and so will print "check precedence".

Hope that was helpfull,
Kapil Hingu

Joined: May 01, 2003
Posts: 6
Hi Grady,

If you look at operator precedence order of || and &&, && has the higher precedence than operator ||.
And also if you remember java always evaluates left oprand first for binary operators.
So the expression will get evaluated as -

boolean x = (a = true) || (b = true) && (c = true);//Original expression.

x = ((a = true) || ((b = true) && (c = true)));//According to the precedence.

x = (true || ((b = true) && (c = true)));//Left oprand evaluated first.

At this point sencond expression i.e ((b = true) && (c = true)) will never get evaluated as has got short circuited.

Hence the result is,

x = true; with a = true , b = false & c = false.

I hope this answers your question and not adding any confusion
Correct me if my understanding is wrong!

Grady Jamyson
Ranch Hand

Joined: Aug 04, 2002
Posts: 42
Thank you, guys.
I'm quite clear how it works after you two explained.
I agree. Here's the link:
subject: short-circuit question
jQuery in Action, 3rd edition