Open In App

Java Ternary Operator Puzzle

Improve
Improve
Improve
Like Article
Like
Save Article
Save
Share
Report issue
Report

Find the output of the program




public class GFG {
    public static void main(String[] args) {
    char x = 'X';
    int i = 0;
    System.out.print(true ? x : 0);
    System.out.print(false ? i : x);
    }
}


Solution:
If you run the program,you found that it prints X88. The first print statement prints X and the second prints 88.

The rules for determining the result type of a conditional expression are too long and complex to reproduce in their entirety, but here are three key points.

  1. If the second and third operands have the same type, that is the type of the conditional expression. In other words, you can avoid the whole mess by steering clear of mixed-type computation.
  2. If one of the operands is of type T where T is byte, short, or char and the other operand is a constant expression of type int whose value is re-presentable in type T, the type of the conditional expression is T.
  3. Otherwise, binary numeric promotion is applied to the operand types, and the type of the conditional expression is the promoted type of the second and third operands.

Points 2 and 3 are the key to this puzzle. In both of the two conditional expressions in the program, one operand is of type char and the other is of type int. In both expressions, the value of the int operand is 0, which is representable as a char. Only the int operand in the first expression, however, is constant (0); the int operand in the second expression is variable (i). Therefore, point 2 applies to the first expression and its return type is char. Point 3 applies to the second conditional expression, and its return type is the result of applying binary numeric promotion to int and char, which is int.

The type of the conditional expression determines which overloading of the print method is invoked. For the first expression, PrintStream.print(char) is invoked; for the second, PrintStream.print(int). The former overloading prints the value of the variable x as a Unicode character (X), whereas the latter prints it as a decimal integer (88).


Last Updated : 25 Sep, 2017
Like Article
Save Article
Previous
Next
Share your thoughts in the comments
Similar Reads