在Java中,NAN(Not-a-Number)和INFINITY(无穷大)是浮点数类型(float和double)的特殊值,用于表示特定的数值情况。以下是关于NAN和INFINITY的详细解释和示例代码:
1、NAN
NAN是一个特殊的浮点数值,表示无效或未定义的数值结果。它通常出现在无法进行有效计算或产生无法表示的结果时。例如,0.0除以0.0或负数的平方根等操作都会产生NAN。
基本类型示例代码:
double a = 0.0 / 0.0;// 产生NANdouble b = 0.0 / 0.0;// 产生NANdouble c = 0.0 / 0.0;// 产生NANSystem.out.println(a);// 输出: NaNSystem.out.println(a!=a);// 输出: trueSystem.out.println(a!=b);// 输出: trueSystem.out.println(a!=c);// 输出: trueSystem.out.println(Double.isNaN(a));// 输出: true
结论:对于基本类型,NaN和自己是不相等的,NaN和任何值都不相等,可以通过Double.isNaN(a)的方式来判断是不是NaN,该方法实现也是通过v != v来判断的
包装类型示例代码:
double b = 0.0d / 0.0; //NaNDouble c = 0.0d / 0.0; //NaNDouble d = 0.0d / 0.0; //NaNSystem.out.println(Double.isNaN(c)); //trueSystem.out.println(Double.isNaN(d)); //trueSystem.out.println(c == c); //trueSystem.out.println(c == d); //falseSystem.out.println(c == b); //falseSystem.out.println(c.equals(c)); //trueSystem.out.println(c.equals(d)); //trueSystem.out.println(c.equals(b)); //true
结论:对于包装类型,通过”==”比较和自己是相等的,和其他NaN不相等;
通过”equals”比较是,和自己相等,和其他NaN也相等。
2、INFINITY(无穷大):
INFINITY表示一个超出浮点数范围的数值,可以是正无穷大(+INFINITY)或负无穷大(-INFINITY)。它通常出现在数值溢出或除以0的情况下。
基本类型示例代码:
double a = 1.0 / 0.0; //Infinitydouble b = 1.0 / 0.0; //InfinitySystem.out.println(Double.isInfinite(a)); //trueSystem.out.println(a == a); //trueSystem.out.println(a == b); //true
结论: 对于基本类型Infinity和自己相等,和其他的Infinity也相等
包装类型示例代码:
double b = 1.0 / 0.0; //InfinityDouble c = 1.0 / 0.0; //InfinityDouble d = 1.0 / 0.0; //InfinitySystem.out.println(Double.isInfinite(c)); //trueSystem.out.println(c == c); //trueSystem.out.println(c == d); //falseSystem.out.println(c == b); //trueSystem.out.println(c.equals(c)); //trueSystem.out.println(c.equals(d)); //trueSystem.out.println(c.equals(b)); //true
结论:包装类型Double的Infinity,通过”==”比较和自己是相等的,和其他包装类型的Infinity不相等,但是和其他基本类型的Infinity是相等的;
通过”equals”比较是,和自己相等,和其他Infinity也相等