Why does (int)(2/0.9) = 2?



我将其放入Java中,并给了我结果2。在想知道为什么不是arithmeticexception,而不是(int)(2/0.9)变成2/0。所有的帮助都得到赞赏。

您的代码是

(int) (2 / 0.9)

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

2.0 / 0.9 = 2.22...

此过程被称为数字促销(它使用延长原始转换此处的JLS§5.1.2)。来自JLS§5.6:

a 数字促进是一个过程,在鉴于算术运算符及其参数表达式的情况下,参数被转换为推断的目标类型T。在促销期间选择T ,以使每个参数 expression 可以转换为 T,并且arithmetic 操作是定义的型T的值。

之后,您 cast to int,该值将在这种情况下将值围绕到下一个下部整数,2。因此结果是2


您期望的是

之类的表达的结果
2 / (int) 0.9
// or more explicit:
2 / ((int) 0.9)

首先将0.9施放到int之前。在这种情况下,您将正确获得

2 / 0

产生预期的ArithmeticException

最新更新