我将它放入 java 中,得到了结果 2。想知道为什么它不是 ArithmeticException,因为 (int)(2/0.9) 不应该变成 2/0。感谢所有帮助。
问问题
461 次
1 回答
3
你的代码是
(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:
数值提升是一个过程,通过该过程,给定算术运算符及其参数表达式,将参数转换为推断的目标类型
T
。T
在提升期间选择,以便可以将每个参数表达式转换为 ,并为 type 的值定义T
算术运算。T
之后,在这种情况下,您转换为int
which 会将值四舍五入为下一个较低的整数。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 回答