Java Numeric Promotion in Conditional Expression

Course Curriculum

Java Numeric Promotion in Conditional Expression

Java Numeric Promotion in Conditional Expression

The conditional operator ? : uses the boolean value of one expression to decide which of two other expressions should be evaluated.

So, we expect the expression,

Object o1 = true ? new Integer(4) : new Float(2.0));
to be same as,

Object o2;
if (true)
o2 = new Integer(6);
else
o2 = new Float(2.0);

But the result of running the code gives an unexpected result.

// A Java program to demonstrate that we should be careful
// when replacing conditional operator with if else or vice
// versa
import java.io.*;
class P_AI
{
public static void main (String[] args)
{
// Expression 1 (using ?: )
// Automatic promotion in conditional expression
Object o1 = true ? new Integer(6) : new Float(2.0);
System.out.println(o1);

// Expression 2 (Using if-else)
// No promotion in if else statement
Object o2;
if (true)
o2 = new Integer(6);
else
o2 = new Float(2.0);
System.out.println(o2);
}
}
Output:

6.0
4

  • According to Java Language Specification Section 15.25, the conditional operator will implement numeric type promotion if there are two different types as 2nd and 3rd operand.
  • The rules of conversion are defined at Binary Numeric Promotion.
  • Therefore, according to the rules given, If either operand is of type double, the other is converted to double and hence 6 becomes 6.0.

Whereas, the if/else construct does not perform numeric promotion and hence behaves as expected.

Addition and Concatenation in Java (Prev Lesson)
(Next Lesson) Character Stream Vs Byte Stream in Java
', { 'anonymize_ip': true });