Find the output of the program
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.
- 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.
- 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.
- 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).
This article is contributed by Shubham Juneja. If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to email@example.com. See your article appearing on the GeeksforGeeks main page and help other Geeks.
Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above.
- new operator in Java
- Difference between concat() and + operator in Java
- new operator vs newInstance() method in Java
- Double colon (::) operator in Java
- instanceof operator vs isInstance() method in Java
- A Java Random and StringBuffer Puzzle
- Java Function/Constructor Overloading Puzzle
- Java Multicasting (Typecasting multiple times) Puzzle
- Multiples of 3 and 5 without using % operator
- How can we use Comma operator in place of curly braces?
- Java.util.LinkedList.poll(), pollFirst(), pollLast() with examples in Java
- Java.util.function.IntPredicate interface in Java with Examples
- Java.util.BitSet class methods in Java with Examples | Set 2
- Java.util.concurrent.RecursiveAction class in Java with Examples
- Java.util.function.DoublePredicate interface in Java with Examples