Evaluation of an expression in Java that contains conditional operator

Tags: , , ,

Have a look to the following java expression:

srcVariableValue = 
     ((leftRealValue instanceof Integer) ? ((Integer) leftRealValue) : ((Double) leftRealValue)) 
     ((rightRealValue instanceof Integer) ? ((Integer) rightRealValue) : ((Double) rightRealValue));

When it is executed, if leftRealValue and rightRealValue are Integer, the result is Double.

For instance:

  • rightRealValue = 1 type Integer
  • leftRealValue = 0 type Integer


  • srcVariableValue = 1.0 type Double

Is this the expected behaviour? Of course, switching to if statement, it works well, the result is of type Integer.

I’m using Java 7

Thanks so much.


For both primitive operands (int, double) and wrapper class operands (Integer, Double) binary numeric promotion will be applied.



It means, first, for the second scenario, an unboxing conversion happens.

Integer -> int
Double -> double

Then, for both, a widening primitive conversion takes place resulting in a double

int -> double
double = expression ? double : double


which may be converted further based on the variable you assign the result to.

Source: stackoverflow