Monday 6 March 2017

The ? Operator & Using Parentheses - Java Tutorials

The ? Operator


Java includes a special ternary (three-way) operator that can replace certain types of if-then-else statements. This operator is the ?, and it works in Java much like it does in C, C++, and C#. It can seem somewhat confusing at first, but the ? can be used very effectively once mastered. The ? has this general form:

  expression1 ? expression2 : expression3

Here, expression1 can be any expression that evaluates to a boolean value. If expression1 is true, then expression2 is evaluated; otherwise, expression3 is evaluated. The result of the ? operation is that of the expression evaluated. Both expression2 and expression3 are required to return the same type, which can’t be void.

Here is an example of the way that the ? is employed:

  ratio = denom == 0 ? 0 : num / denom;

When Java evaluates this assignment expression, it first looks at the expression to the left of the question mark. If denom equals zero, then the expression between the question mark and the colon is evaluated and used as the value of the entire ? expression. If denom does not equal zero, then the expression after the colon is evaluated and used for the value of the entire ? expression. The result produced by the ? operator is then assigned to ratio.

Here is a program that demonstrates the ? operator. It uses it to obtain the absolute value of a variable.

  // Demonstrate ?.
  class Ternary {
    public static void main(String args[]) {
      int i, k;

      i = 10;
      k = i < 0 ? -i : i; // get absolute value of i
      System.out.print("Absolute value of ");
      System.out.println(i + " is " + k);

      i = -10;
      k = i < 0 ? -i : i; // get absolute value of i
      System.out.print("Absolute value of ");
      System.out.println(i + " is " + k);
    }
  }


The output generated by the program is shown here:

  Absolute value of 10 is 10
  Absolute value of -10 is 10


Operator Precedence

Table 4-1 shows the order of precedence for Java operators, from highest to lowest. Notice that the first row shows items that you may not normally think of as operators: parentheses, square brackets, and the dot operator. Parentheses are used to alter the precedence of an operation. As you know from the previous chapter, the square brackets provide array indexing. The dot operator is used to dereference objects and will be discussed later in this book.




Using Parentheses

Parentheses raise the precedence of the operations that are inside them. This is often necessary to obtain the result you desire. For example, consider the following expression:

  a >> b + 3


The Precedence of the Java Operators

Highest

( )                [ ]                .

++               – –               ~                !

*                 /                   %

+                 –

>>              >>>              <<

>                >=                <                <=

==              !=

&

^

|

&&

||

?:

=                 op=

Lowest


This expression first adds 3 to b and then shifts a right by that result. That is, this expression can be rewritten using redundant parentheses like this:

  a >> (b + 3)

However, if you want to first shift a right by b positions and then add 3 to that result, you will need to parenthesize the expression like this:

  (a >> b) + 3

In addition to altering the normal precedence of an operator, parentheses can sometimes be used to help clarify the meaning of an expression. For anyone reading your code, a complicated expression can be difficult to understand. Adding redundant but clarifying parentheses to complex expressions can help prevent confusion later. For example, which of the following expressions is easier to read?

  a | 4 + c >> b & 7
  (a | (((4 + c) >> b) & 7))

One other point: parentheses (redundant or not) do not degrade the performance of your program. Therefore, adding parentheses to reduce ambiguity does not negatively affect your program.

No comments:

Post a Comment