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