可能重复:
Why doesn't Java throw an Exception when dividing by 0.0?
为什么Java中的以下语句不会报告ArithmeticException?
double d = 1.0/0;
答案 0 :(得分:8)
简而言之:浮点数可以表示无穷大(甚至是产生非数字值的运算),因此导致此结果的操作(例如除以0)是有效的。
扩展Mohammod Hossain的答案,以及this question and its accepted answer,抛出ArithmeticException“当出现异常算术条件时抛出”。对于整数,除以0就是这种情况,但对于浮点数(float
s和double
s),存在正负表示。
举个例子,
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编码的float
和double
的可接受值。< / p>
此外,来自this forum post:
浮点表示通常包括+ inf,-inf甚至“不是a 数字“。整数表示没有。你所看到的行为不是 Java是独一无二的,大多数编程语言都会做类似的事情, 因为那就是浮点硬件(或低级库) 做。
再次来自论坛帖子:
因为所使用的浮点数的IEEE标准已经定义 正负无穷大的值,特殊的“不是 数字“case。查看java.lang.Float和java.lang.Double中的内容 详情。