System.out.println("17.0/0="+17.0/0)为何结果是无穷大而System.out.println("17/0="+17/0)会编译报错?
17.0是double类型,而0是int类型,17.0/0 ,根据类型转换,0会自动转换为double类型,既0.0
这个涉及到计算机底层对于数据存储的算法,对于计算机来说,只不过是不同的计算底层计算方式而已,要仔细说的话,就比较麻烦了
纠正一下System.out.println("17/0="+17/0);这行代码不会包编译错的,但是运行时会报异常的:
Exception in thread "main" java.lang.ArithmeticException: / by zero
at test.CompilerTest.main(CompilerTest.java:5)
第二个很容易理解,抛出被除数为0的异常。并不是编译出错。解释是,计算机无法保存一个无穷大的数(内存溢出),所以会抛出异常,至于double,只能说它和int类型运算方式可能不一样,又或者是java自己的原因,这就不得而知了。
System.out.println("17.0/0="+17.0/0) 17.0是double,0是int会自动进行类型转换,
实际上double是有精度问题的,double0并不是真正的0.0,可能是0.000000000000000005,除以一个很小的数,商自然会无穷大
System.out.println("17/0="+17/0) 17是整数0也是整数,不会有类型转换,但是整数0不能做除数会抛出异常