Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

 

Programmers frequently make errors regarding the precedence of operators because of the unintuitive low-precedence levels of &, |, ^, <<, and >>. Avoid mistakes regarding precedence through the suitable use of parentheses. This can , which also improves code readability. The precedence of operations by the order of the subclauses are defined in the Java Tutorials [Tutorials 2008].

...

This expression gets evaluated as follows, resulting in the value 0.:

Code Block
x & (1337 - 1337)

...

This compliant solution uses parentheses to ensure that the expression evaluates as intended.:

Code Block
bgColor#ccccff
public static final int MASK = 1337;
public static final int OFFSET = -1337;

public static int computeCode(int x) {
  return (x & MASK) + OFFSET;
}

...

In this noncompliant code example, the intent is to add to the string "value=".:

Code Block
bgColor#FFCCCC
public class Test{
    public static void main(String[] args) {
        String s = null;
        System.out.println("value=" + s == null? 0 : 1); // prints "1"
    }
}

...

This compliant solution uses parentheses to ensure that the expression evaluates as intended.:

Code Block
bgColor#ccccff
public class Test{
    public static void main(String[] args) {
        String s = null;
        System.out.println("value=" + (s == null? 0 : 1)); // prints "value=0" as expected
    }
}

...

Parentheses may be omitted from mathematical expressions that follow the algebraic precedence rules. For instance, consider the following expression:

Code Block
x + y * z

...

Related Guidelines

[Rogue 2000]Rule 77: , Clarify the order of operations with parentheses

Bibliography

[ESA 2005]

Rule 65: , Use parentheses to explicitly indicate the order of execution of numerical operators

[Tutorials 2008]

Expressions, Statements, and Blocks
Operators

 

...

...