1. 先看一组表达式

public static void test1() {try {// System.out.println(1 / 0);System.out.println(0 / 0);} catch (Exception e) {System.out.println(e);} finally {System.out.println(1 / 0.0);System.out.println(1.0 / 0.0);System.out.println(1.0 / 0);System.out.println(-1.0 / 0);}
}
这段代码运行结果如下:
java.lang.ArithmeticException: / by zero
Infinity
Infinity
Infinity
-Infinity
可以看出:
  • 当分子、分母都为整型,分母为 0 的时候,会报除0异常
  • 当分子、分母中有一个为浮点型,且分母为 0 或 0.0 的时候,会得到 Infinity (正无穷大) 或 -Infinity(负无穷大)
原因(个人理解):
  • 分子、分母都为整型,且分母为0,除0异常,这基本就是规定
  • 如果分子、分母中有一个是浮点型时,Java会将整型自动转为浮点型;
    也就是说 1.0 / 0 -> 1.0 / 0.0,1 / 0.0 -> 1.0 / 0.0;
    大家都知道浮点型是不精确的,所以0.0 并不完全等于0,是无限趋近于0;
    而根据高数中无穷大的理解,分母无限趋近于0,分子为常数,会得到无穷大

2. Java中是如何表达无穷大和无穷小的

先看测试代码
public static void test2() {double d_p_i = Double.POSITIVE_INFINITY;  // 1.0 / 0.0, 正无穷大double d_n_i = Double.NEGATIVE_INFINITY;  // -1.0 / 0.0,负无穷大float f_p_i = Float.POSITIVE_INFINITY;    // 1.0f / 0.0f,正无穷大float f_n_i = Float.NEGATIVE_INFINITY;    // -1.0f / 0.0f,负无穷大System.out.println(d_p_i == f_p_i);System.out.println(d_n_i == f_n_i);
}
运行结果:
true
true
看源代码如何定义:
/*** A constant holding the positive infinity of type* {@code double}. It is equal to the value returned by* {@code Double.longBitsToDouble(0x7ff0000000000000L)}.*/
public static final double POSITIVE_INFINITY = 1.0 / 0.0;/*** A constant holding the negative infinity of type* {@code double}. It is equal to the value returned by* {@code Double.longBitsToDouble(0xfff0000000000000L)}.*/
public static final double NEGATIVE_INFINITY = -1.0 / 0.0;/*** A constant holding the positive infinity of type* {@code float}. It is equal to the value returned by* {@code Float.intBitsToFloat(0x7f800000)}.*/
public static final float POSITIVE_INFINITY = 1.0f / 0.0f;/*** A constant holding the negative infinity of type* {@code float}. It is equal to the value returned by* {@code Float.intBitsToFloat(0xff800000)}.*/
public static final float NEGATIVE_INFINITY = -1.0f / 0.0f;
注意Double和Float的无穷大、无穷小相比,结果为 true

3. Java中的非数 (NaN)

其实很多表达式都会出现 NaN, 以下仅列出几个示例,看测试代码:
public static void test3() {double d_NaN = Double.NaN;  // 0.0d / 0.0float f_NaN = Float.NaN;    // 0.0f / 0.0fSystem.out.println(0.0 / 0.0);System.out.println(0 / 0.0);System.out.println(0.0 / 0);System.out.println(d_NaN == f_NaN);
}
运行结果:
NaN
NaN
NaN
false
注意这里的 Double的NaN 和 Float的NaN 相比,为false
看源代码如何表示:
/*** A constant holding a Not-a-Number (NaN) value of type* {@code double}. It is equivalent to the value returned by* {@code Double.longBitsToDouble(0x7ff8000000000000L)}.*/
public static final double NaN = 0.0d / 0.0;/*** A constant holding a Not-a-Number (NaN) value of type* {@code float}.  It is equivalent to the value returned by* {@code Float.intBitsToFloat(0x7fc00000)}.*/
public static final float NaN = 0.0f / 0.0f;

4. Java常见类型的最大最小值,及所占二进制位数和字节数

直接看测试代码:
public static void test4() {System.out.println("\nByte: ");System.out.println(Byte.SIZE);System.out.println(Byte.BYTES);System.out.println(Byte.MAX_VALUE);System.out.println(Byte.MIN_VALUE);System.out.println("\nShort: ");System.out.println(Short.SIZE);System.out.println(Short.BYTES);System.out.println(Short.MAX_VALUE);System.out.println(Short.MIN_VALUE);System.out.println("\nInteger: ");System.out.println(Integer.SIZE);System.out.println(Integer.BYTES);System.out.println(Integer.MAX_VALUE);System.out.println(Integer.MIN_VALUE);System.out.println("\nLong: ");System.out.println(Long.SIZE);System.out.println(Long.BYTES);System.out.println(Long.MAX_VALUE);System.out.println(Long.MIN_VALUE);System.out.println("\nFloat: ");System.out.println(Float.SIZE);System.out.println(Float.BYTES);System.out.println(Float.MAX_VALUE);System.out.println(Float.MIN_VALUE);System.out.println("\nDouble: ");System.out.println(Double.SIZE);System.out.println(Double.BYTES);System.out.println(Double.MAX_VALUE);System.out.println(Double.MIN_VALUE);
}
输出结果为:
Byte:
8
1
127
-128

Short:
16
2
32767
-32768

Integer:
32
4
2147483647
-2147483648

Long:
64
8
9223372036854775807
-9223372036854775808

Float:
32
4
3.4028235E38
1.4E-45Double:
64
8
1.7976931348623157E308
4.9E-324
查看源代码,以 Integer 为例:
/*** The number of bits used to represent an {@code int} value in two's* complement binary form.** @since 1.5*/
@Native public static final int SIZE = 32;/*** The number of bytes used to represent a {@code int} value in two's* complement binary form.** @since 1.8*/
public static final int BYTES = SIZE / Byte.SIZE;/*** A constant holding the minimum value an {@code int} can* have, -2<sup>31</sup>.*/
@Native public static final int   MIN_VALUE = 0x80000000;/*** A constant holding the maximum value an {@code int} can* have, 2<sup>31</sup>-1.*/
@Native public static final int   MAX_VALUE = 0x7fffffff;

注:本人代码都是基于 jdk1.8 运行
其实还有很多的常量我们都不是经常用到,这里仅列出一部分,仅供参考。其它的需要各位在实践中多去了解

Java中无穷大、无穷小、非数、最大值、最小值相关推荐

  1. java中文章的阅读数统计

    java中文章的阅读数统计 1.直接操作数据库进行增加操作存在问题 存在问题:每次请求都要update数据库,如果访问量大了之后,数据库存在操作压力,此时怎么办? 解决方法:1.提高数据库性能(横向/ ...

  2. java 36 进制_数学-在Java中如何将十进制数转换为以36为底的数字?

    数学-在Java中如何将十进制数转换为以36为底的数字? 如果我有一个十进制数字,如何在Java中将其转换为以36为基数? slavoj asked 2020-07-13T23:15:07Z 10个解 ...

  3. *java* 在Java中给Int类型的最大值+1 ,以及int与byte之前强转的例子

    1.给int最大值+1 public class Test1{public static void main(String[] args){//保存当前int的最大值,同理也有long maxValu ...

  4. java中获取文件总行数_关于java:如何以有效的方式获取文件中的行数?

    本问题已经有最佳答案,请猛点这里访问. 我有一个大文件. 它包括大约3.000-20.000行. 如何使用Java获取文件中的行总数? 从你的评论到答案来判断,你要找的词是"有效的" ...

  5. Java中输入一个十进制数,如何转换为二进制数

    方法一:利用Java API直接转换 十进制数如何转换为二进制数,这在Java API 中有一个方法,Integer.toBinaryString( ) 括号里面写上你要转换的十进制数,这样可以直接转 ...

  6. Java 中文件之魔数

    Java 中令人匪夷所思的 Magic 之魔数 先来讲讲一个故事,公司突然有一个需求,客户提交的文件,让你获取到他提交的文件到底是一个什么文件,这个不是小事一桩吗?直接上代码. public stat ...

  7. Java中静态内部类和非静态内部类有什么区别?

    Java中的内部类是在Jdk1.1版本之后增加的,内部类是Java语言中一个比较重要的概念,如果能把内部类运用好,那么会明显增强Java程序的灵活性. 要想清楚static内部类和非static内部类 ...

  8. java中静态是什么,java中静态和非静态有什么区别

    首先我们先来说说jvm内存模型: jvm内存分为:方法区.堆.栈和程序计数器. 下面我们来简单的说说方法区.栈和堆: 方法区:是各个线程共享的区域,存放类信息/常量/静态变量: 栈:其实每个线程都会分 ...

  9. Java中的NIO非阻塞编程

    在JDK1.4以前,Java的IO操作集中在java.io这个包中,是基于流的阻塞API.对于大多数应用来说,这样的API使用很方便,然而,一些对性能要求较高的应用,尤其是服务端应用,往往需要一个更为 ...

最新文章

  1. vue.js+socket.io打造一个好玩的新闻社区
  2. html5新年网页做给父母的,春节回家,要陪父母做这十件小事
  3. 支付宝(即时到账批量退款业务错误码)
  4. 字符串多模式精确匹配(脏字/敏感词汇搜索算法)——TTMP算法 之理论(转)...
  5. 支持delete吗_Spark Delta Lake 0.4.0 发布,支持 Python API 和部分 SQL
  6. C++学习(二)之Visual Studio写system语句 生成可执行文件
  7. python numpy loadtxt
  8. UVA11636 Hello World!【模拟】
  9. memcached—向memcached中保存Java实体需注意的问题
  10. mysql 测试数据生成器_8个免费的测试数据/样本数据生成器
  11. QOS端口限速EMAIL流量限速
  12. Linux上安装SAPGUI(附安装包)
  13. 计算机各键的名称和作用,space是什么键 键盘键位名称及功用详解
  14. win10 图形驱动安装失败解决方法
  15. mac m1 esc键失灵
  16. leetcode 514. Freedom Trail(自由之路)
  17. MyBatis 集成MyBatisPlus
  18. 三维实景切图软件使用教程
  19. excel不均匀坐标轴_使用不等距的坐标轴标签来改变Excel图表的展现形态的方法...
  20. 含汞废水的深度处理方法

热门文章

  1. 详谈软件架构设计(一)之软件架构的概念以及风格-上
  2. Python|判断字符串是否符合日期要求
  3. js金额千分位 及 清除千分位
  4. C#代码中用UL 0B 0X等前后缀表示数字
  5. PWM调光频率0.1-20KHz以内,共阳极控制高辉无频闪LED车灯调光电源驱动芯片方案FP7125/FP7122/FP7123
  6. 光伏MPPT电路效率对比实测
  7. Java Web程序设计第12章课后第2题
  8. varint zigzag 编码学习
  9. python pip 运用及下载
  10. 程序实现泊松随机分布