为什么(int)(2 / 0.9)= 2?

时间:2017-11-30 00:52:18

标签: java casting arithmeticexception

我把它放到java中,我得到了结果2.想知道为什么它不是ArithmeticException,因为不应该(t)(2 / 0.9)变成2/0。所有帮助表示赞赏。

1 个答案:

答案 0 :(得分:2)

您的代码是

(int) (2 / 0.9)

因此,int - 强制转换仅适用于计算2 / 0.9之后的结果 。现在2 / 0.9int除以double值。在这种情况下,int也将被解释为double(在这种情况下为2.0)。结果就像

2.0 / 0.9 = 2.22...

此过程称为数字促销(它使用扩展基元转换此处JLS§5.1.2)。来自JLS§5.6

  

数字提升是一个过程,通过该过程,给定算术运算符及其参数表达式,参数将转换为推断的目标类型T。在促销期间选择T,以便每个参数表达式可以转换为 T并且算术对于T类型的值,定义了操作。

之后,强制转换int,这会将值四舍五入到下一个较低的整数2。因此结果是2

您期望的是像

这样的表达式的结果
2 / (int) 0.9
// or more explicit:
2 / ((int) 0.9)

在分割之前首先将0.9投射到int。在这种情况下,你会正确地得到

2 / 0

产生预期的ArithmeticException