• Post Reply
  • Bookmark Topic Watch Topic
  • New Topic

Expression evaluation

 
Philip Pomario
Ranch Hand
Posts: 113
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Could someone please explain me the order of evaluation the following expression uses to execute? I guess it would be easier just to put the extra parenthesis in place.

int i=1;
int j = 2;
if (i==1 || j==2){
System.out.println("true");
}

Thanks!
 
Paul Santa Maria
Ranch Hand
Posts: 236
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Hi -

A quick Google search for "Java operator precedence" took me straight to Sun's official documentation:
http://java.sun.com/docs/books/tutorial/java/nutsandbolts/expressions.html

You'll note in the table that "equality" (==, !=) has higher precedence than "logical OR". So the expression will be evaluated:

(i == 1) || (j == 2 )
<= THIS WILL, OF COURSE, EVALUATE TO "TRUE"

One thing the Java page *doesn't* mention is that "&&" and "||" are "short circuit" operators - that is, the second expression will *not* be evaluated if the first one is true. This can often be a very important distinction.
Hope that helps .. PSM
[ February 11, 2005: Message edited by: Paul Santa Maria ]
 
Ilja Preuss
author
Sheriff
Posts: 14112
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Originally posted by Filipe Pomar:
I guess it would be easier just to put the extra parenthesis in place.


Yes, I'd probably do exactly that.
 
Philip Pomario
Ranch Hand
Posts: 113
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Thanks guys!
 
Layne Lund
Ranch Hand
Posts: 3061
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Originally posted by Paul Santa Maria:

...
One thing the Java page *doesn't* mention is that "&&" and "||" are "short circuit" operators - that is, the second expression will *not* be evaluated if the first one is true. This can often be a very important distinction.
Hope that helps .. PSM

[ February 11, 2005: Message edited by: Paul Santa Maria ]

This statement is only true of the || operator. For the && operator, if the first operand evaluates to false, then the second expression is not evaluated.
 
Philip Pomario
Ranch Hand
Posts: 113
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
I just passed the SCJP1.4 exam and wanted to post this appreciation note to thank everyone who helped me understand Java a little better. Without your help this personal achievement wouldn't be possible.
  • Post Reply
  • Bookmark Topic Watch Topic
  • New Topic