In Java, what are the boolean "order of operations"?

Stephano picture Stephano · Feb 15, 2010 · Viewed 62.2k times · Source

Let's take a simple example of an object Cat. I want to be sure the "not null" cat is either orange or grey.

if(cat != null && cat.getColor() == "orange" || cat.getColor() == "grey") {
//do stuff
}

I believe AND comes first, then the OR. I'm kinda fuzzy though, so here are my questions:

  1. Can someone walk me through this statement so I'm sure I get what happens?

  2. Also, what happens if I add parentheses; does that change the order of operations?

  3. Will my order of operations change from language to language?

Answer

Bill the Lizard picture Bill the Lizard · Feb 15, 2010

The Java Tutorials has a list illustrating operator precedence. The equality operators will be evaluated first, then &&, then ||. Parentheses will be evaluated before anything else, so adding them can change the order. This is usually pretty much the same from language to language, but it's always a good idea to double check.

It's the small variations in behavior that you're not expecting that can cause you to spend an entire day debugging, so it's a good idea to put the parentheses in place so you're sure what the order of evaluation will be.