2

可能重复:
为什么 Java 除以 0.0 时不抛出异常?

为什么Java中的以下语句不会报告ArithmeticException?

double d = 1.0/0;
4

1 回答 1

8

简而言之:浮点数可以表示无穷大(甚至可以表示产生非数字值的操作),因此导致这种情况的操作(例如除以 0)是有效的。

扩展 Mohammod Hossain 的答案,以及这个问题及其接受的答案,引发 ArithmeticException “发生异常算术条件时抛出”。对于整数,除以 0 就是这种情况,但对于浮点数(floats 和doubles),存在正数和负数表示。

举个例子,

public class DivZeroFun {

    public static void main(String args[]) {

        double f = 5.0;
        System.out.println(f / 0);
        double f2 = -5.0;
        System.out.println(f2/0);
    }
}

此代码将打印“Infinity”,然后打印“-Infinity”作为其答案,因为“Infinity”实际上是用 Java 编码的floats 和s 的可接受值。double

另外,从这个论坛帖子

浮点表示通常包括 +inf、-inf 甚至“非数字”。整数表示不会。您看到的行为并不是 Java 独有的,大多数编程语言都会做类似的事情,因为这就是浮点硬件(或低级库)正在做的事情。

再次来自论坛帖子:

因为所用浮点数的 IEEE 标准定义了正无穷和负无穷的值,以及特殊的“非数字”情况。有关详细信息,请参阅 java.lang.Float 和 java.lang.Double 中的内容。

于 2012-07-25T05:48:43.883 回答