关于Java中的除以零的研究

前言

之前一直以为Java中如果出现被除数为0时,只会出现抛出ArithmeticException这个异常,但是有次无意中发现被除数为double时却不会抛出异常。于是就准备了一些测试用例研究一下。本人使用的JDK版本为1.8.0_162

用例

整数类型

被除数为byteshortintlong时,测试用例如下所示(只展示int的代码)

	int a=1;
	int b=0;
	System.out.println(a/b);

运行结果为

	java.lang.ArithmeticException: / by zero
	...此处省略堆栈信息

浮点数类型

被除数为floatdouble时,测试用例如下所示(只展示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的拓展知识

  1. Infinity其实是个double类型的常量。
  2. Infinity并不是在rt.jar中定义的。而是nashorn.jar中的jdk.nashorn.internal.objects.Global中定义的常量。其定义的源码如下:public static final double Infinity = 1.0D / 0.0;
  3. 可以直接给double类型的变量赋值,如:double d=Infinity;
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值