System.out.println(1.0 / 0); 为什么不报错呢

遇到了一个简单的细节, 做个记录,直接贴代码

    System.out.println(1.0 / 0);
    //下面报错
    System.out.println(1 / 0);
  • int型数据,除0会发生报错,信息如下:
Infinity
Exception in thread "main" java.lang.ArithmeticException: / by zero
    at leetcode_normal.Test1.main(Test1.java:111)
  • 然而,System.out.println(1.0 / 0);为什么返回值会是Infinity
  • 各种查找得,Infinity表示无穷大,java中,只有浮点类型数据存在这种表达形式, 其他类型都有明确的数据范围
  • 当double类型数据除int类型数据时,隐式类型转换,int类型->double类型,即System.out.println(1.0 / 0);转为为System.out.println(1.0 / 0.0);.
  • 而浮点运算0.0作为除数时,会转为一个无限接近于0的小数,而不是彻底的zero,

再贴一下完整的代码

    System.out.println(1.0 / 0);
    System.out.println(1.0 / 0.0);
    System.out.println((long)(1.0 / 0.0));
    System.out.println(1 / 0);
Infinity
Infinity
Exception in thread "main" java.lang.ArithmeticException: / by zero
    at leetcode_normal.Test1.main(Test1.java:112)
9223372036854775807
  • 可以看到, double/0与double/0.0结果都为无穷大,
  • 用long返回可以得到一个非常非常大的数字
  • 另外,double源码中有关无穷大与无穷小的定义为
    public static final double POSITIVE_INFINITY = 1.0 / 0.0;
    public static final double NEGATIVE_INFINITY = -1.0 / 0.0;
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 目录:1.基本数据类型2.引用数据类型 数据类型: Java语言是一个强类型语言 1.所有变量,必须先声明类型...
    Ansaxnsy阅读 1,012评论 0 7
  • 立春的季节大地并没有完全的复苏。早晨,田间地头依然铺满的霜雾,傍晚时分,依然寒风刺骨,但西安街头的行人却已经春装在...
    杨释阅读 564评论 1 2
  • 记录海瑜的学校趣事,今天中午还是和往常一样12点来到学校的前门接她放学,见她慢悠悠的在校园的花坛前走来走去,手上拿...
    云影果果阅读 324评论 0 0
  • 吃完香喷喷的烤鱼,两个孩子心满意足地靠在树边。虽然烤着篝火,但是深秋的林中已被寒意深深地笼罩着。欢儿和小陆紧紧地依...
    拥衾听雨待晚虹阅读 213评论 1 3