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

Result:

  • 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.

Answer

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

bnp(int,double)
bnp(Integer,Double)

JLS-15.25

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

double
int -> double
double = expression ? double : double

JLS-5.6.2

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



Source: stackoverflow