15

(这是对Why is this exception is not printing?为什么显示错误的后续问题? )

在下面的代码中,为什么没有触发 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

怎么了?

4

2 回答 2

27

除以零会引发整数值异常,但不会引发浮点值异常。这是在JLS #15.17.2中定义的:

浮点除法的结果由 IEEE 754 算术规则确定:
[...]

  • 非零有限值除以零导致有符号无穷大。符号由上述规则确定。

如果将a和的类型更改dint,则会出现异常。

于 2012-08-26T14:13:13.573 回答
7

因为Divide by zero适用于整数而不是根据JLS浮动

你会得到输出

Its not gonna printed a=Infinity

因为这是计算为Infinity

如果您想查看异常,只需更改

a=44/d;

对此

a=44/0;
于 2012-08-26T14:14:45.990 回答