前言
之前一直以为Java中如果出现被除数为0时,只会出现抛出ArithmeticException这个异常,但是有次无意中发现被除数为double时却不会抛出异常。于是就准备了一些测试用例研究一下。本人使用的JDK版本为1.8.0_162。
用例
整数类型
被除数为byte、short、int、long时,测试用例如下所示(只展示int的代码)
int a=1;
int b=0;
System.out.println(a/b);
运行结果为
java.lang.ArithmeticException: / by zero
...此处省略堆栈信息
浮点数类型
被除数为float、double时,测试用例如下所示(只展示double的代码)
double a=1;
double b=0;
System.out.println(a/b);
运行结果为
Infinity
Infinity是无限大的意思。
BigDecimal
被除数为BigDecimal时,测试用例如下
System.out.println(BigDecimal.ONE.divide(BigDecimal.ZERO));
运行结果为
java.lang.ArithmeticException: Division by zero
...此处省略堆栈信息
结论
通过一系列的测试可以得知,当运算中遇到除以0的情况时,基本类型中的整数类型和BigDecimal会直接抛出ArithmeticException。而基本类型中的浮点数类型时会返回Infinity。
关于Infinity的拓展知识
Infinity其实是个double类型的常量。Infinity并不是在rt.jar中定义的。而是nashorn.jar中的jdk.nashorn.internal.objects.Global中定义的常量。其定义的源码如下:public static final double Infinity = 1.0D / 0.0;- 可以直接给
double类型的变量赋值,如:double d=Infinity;
本文通过测试用例详细解析了Java中除数为0时不同数据类型的表现:整数类型和BigDecimal抛出ArithmeticException,浮点数类型返回Infinity。并介绍了Infinity在Java中的定义。

被折叠的 条评论
为什么被折叠?



