我将其放入Java中,并给了我结果2。在想知道为什么不是arithmeticexception,而不是(int)(2/0.9)变成2/0。所有的帮助都得到赞赏。
您的代码是
(int) (2 / 0.9)
因此,int
- cast 仅应用于结果计算2 / 0.9
之后。现在,2 / 0.9
将int
除以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
。