(这是对Why is this exception is not printed? Why is it showing an error? )的跟进问题
在下面的代码中,为什么没有触发ArithmeticException?
class Exp
{
public static void main(String args[])
{
float d,a=1;
try
{
d=0;
a=44/d; //no exception triggered here.. why?
System.out.print("It's not gonna print: a="+a);
}
catch(ArithmeticException e)
{
System.out.println("Print exception: "+e);
}
}
}
而是输出:
It's not gonna print: a=Infinity
会发生什么?
答案 0 :(得分:27)
除以零会抛出整数值的异常,但不会抛出浮动值。这在JLS #15.17.2:
中定义浮点除法的结果由IEEE 754算法的规则决定:
[...]
- 将零非零有限值除以零会产生有符号无穷大。该标志由上述规则确定。
如果您将a
和d
的类型更改为int
,您将获得例外。
答案 1 :(得分:7)
因为Divide by zero
适用于整数而非浮动,因为JLS
你会得到输出
Its not gonna printed a=Infinity
因为这被计算为Infinity
如果您想要查看例外,只需更改
a=44/d;
到这个
a=44/0;