计算 Java 中包含条件运算符的表达式

Evaluation of an expression in Java that contains conditional operator

查看以下 java 表达式:

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

执行时,如果leftRealValue和rightRealValue为Integer,则结果为Double。

例如:

结果:

这是预期的行为吗?当然,切换到if语句,效果很好,结果是Integer类型。

我正在使用 Java 7

非常感谢。

对于原始操作数(intdouble)和包装器 class 操作数(IntegerDouble),将应用二进制数字提升。

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

JLS-15.25

也就是说,首先,对于第二种情况,发生了开箱转换。

Integer -> int
Double -> double

然后,对于两者,都会发生扩大的原始转换,从而导致 double

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

JLS-5.6.2

可以根据您将结果分配给的变量进一步转换。