繁体   English   中英

评估 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。

例如:

  • rightRealValue = 1 类型 Integer
  • leftRealValue = 0 类型 Integer

结果:

  • srcVariableValue = 1.0 类型 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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM