Have a look to the following java expression:
JavaScript
x
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.
Advertisement
Answer
For both primitive operands (int
, double
) and wrapper class operands (Integer
, Double
) binary numeric promotion will be applied.
JavaScript
bnp(int,double)
bnp(Integer,Double)
It means, first, for the second scenario, an unboxing conversion happens.
JavaScript
Integer -> int
Double -> double
Then, for both, a widening primitive conversion takes place resulting in a double
JavaScript
double
int -> double
double = expression ? double : double
which may be converted further based on the variable you assign the result to.