-3

我将它放入 java 中,得到了结果 2。想知道为什么它不是 ArithmeticException,因为 (int)(2/0.9) 不应该变成 2/0。感谢所有帮助。

4

1 回答 1

3

你的代码是

(int) (2 / 0.9)

所以int-cast只应用于计算结果 。现在除以一个值。在这种情况下,也将被解释为(在这种情况下)。结果是这样的2 / 0.92 / 0.9intdoubleintdouble2.0

2.0 / 0.9 = 2.22...

这个过程被称为数字提升(它在 JLS§5.1.2 中使用扩大原始转换)。从JLS§5.6

数值提升是一个过程,通过该过程,给定算术运算符及其参数表达式,将参数转换为推断的目标类型TT提升期间选择,以便可以将每个参数表达式转换为 ,并为 type 的值定义T算术运算。T

之后,在这种情况下,您转换intwhich 会将值四舍五入为下一个较低的整数。2因此结果是2


您所期望的将是这样的表达式的结果

2 / (int) 0.9
// or more explicit:
2 / ((int) 0.9)

在划分之前首先将 the 转换0.9为 a int。在这种情况下,你会正确地得到

2 / 0

产生预期ArithmeticException

于 2017-11-30T02:41:33.923 回答