常量列表与说明
1. 数值范围常量
常量 |
类型 |
值 |
说明 |
MIN_VALUE |
float |
1.4E-45f |
最小正正规数(正的最小可表示非零值) |
MAX_VALUE |
float |
3.4028235E38f |
最大有限值(正的最大可表示有限值) |
MIN_NORMAL |
float |
1.17549435E-38f |
最小正规数(正的最小正规格化数) |
🔍 MIN_VALUE
vs MIN_NORMAL
:
MIN_NORMAL
:最小正规格化数(指数部分非全0)
MIN_VALUE
:最小正非正规数(subnormal/denormalized number),比 MIN_NORMAL
小得多
System.out.println("MIN_NORMAL: " + Float.MIN_NORMAL); // 1.17549435E-38
System.out.println("MIN_VALUE: " + Float.MIN_VALUE); // 1.4E-45
2. 指数范围常量
常量 |
类型 |
值 |
说明 |
MAX_EXPONENT |
int |
127 |
最大指数(在无偏置形式下) |
MIN_EXPONENT |
int |
-126 |
最小指数(在无偏置形式下) |
💡 IEEE 754 规则:
- 实际存储的指数是偏置的(bias = 127)
- 存储值范围:
1
到 254
(0
和 255
用于特殊值)
- 真实指数 = 存储值 - 127
- 因此真实指数范围:
-126
到 +127
3. 类型信息常量
常量 |
类型 |
值 |
说明 |
SIZE |
int |
32 |
float 类型的位数(bit) |
BYTES |
int |
4 |
float 类型的字节数(byte) |
TYPE |
Class<Float> |
float.class |
float 基本类型的 Class 对象 |
System.out.println("Size: " + Float.SIZE + " bits"); // 32 bits
System.out.println("Bytes: " + Float.BYTES + " bytes"); // 4 bytes
System.out.println("Type: " + Float.TYPE); // float
4. 特殊值常量
常量 |
类型 |
值 |
说明 |
NaN |
float |
NaN |
非数字(Not-a-Number) |
POSITIVE_INFINITY |
float |
Infinity |
正无穷大 |
NEGATIVE_INFINITY |
float |
-Infinity |
负无穷大 |
System.out.println(Float.NaN); // NaN
System.out.println(1.0f / 0.0f); // Infinity
System.out.out.println(Float.POSITIVE_INFINITY); // Infinity
System.out.println(-1.0f / 0.0f); // -Infinity
System.out.println(Float.NEGATIVE_INFINITY); // -Infinity
示例代码
1. 验证常量值
public class FloatConstantsDemo {
public static void main(String[] args) {
System.out.println("=== 数值范围 ===");
System.out.println("MIN_NORMAL: " + Float.MIN_NORMAL);
System.out.println("MIN_VALUE: " + Float.MIN_VALUE);
System.out.println("MAX_VALUE: " + Float.MAX_VALUE);
System.out.println("\n=== 指数范围 ===");
System.out.println("MIN_EXPONENT: " + Float.MIN_EXPONENT); // -126
System.out.println("MAX_EXPONENT: " + Float.MAX_EXPONENT); // 127
System.out.println("\n=== 类型信息 ===");
System.out.println("SIZE: " + Float.SIZE + " bits");
System.out.println("BYTES: " + Float.BYTES + " bytes");
System.out.println("TYPE: " + Float.TYPE);
System.out.println("\n=== 特殊值 ===");
System.out.println("NaN: " + Float.NaN);
System.out.println("POSITIVE_INFINITY: " + Float.POSITIVE_INFINITY);
System.out.println("NEGATIVE_INFINITY: " + Float.NEGATIVE_INFINITY);
}
}
2. 验证 NaN
特性
float nan1 = Float.NaN;
float nan2 = 0.0f / 0.0f;
System.out.println(nan1 == nan2); // false! NaN != NaN
System.out.println(Float.isNaN(nan1)); // true
System.out.println(Float.isNaN(nan2)); // true
3. 验证无穷大
System.out.println(1.0f / 0.0f == Float.POSITIVE_INFINITY); // true
System.out.println(-1.0f / 0.0f == Float.NEGATIVE_INFINITY); // true
使用技巧
✅ 技巧1:检查特殊值
float value = calculate();
if (Float.isNaN(value)) {
System.out.println("结果无效");
} else if (value == Float.POSITIVE_INFINITY) {
System.out.println("结果溢出(正)");
} else if (value == Float.NEGATIVE_INFINITY) {
System.out.println("结果溢出(负)");
} else {
System.out.println("结果: " + value);
}
✅ 技巧2:使用 isFinite()
// Java 8+
if (Float.isFinite(value)) {
// 安全使用 value
} else {
// 处理无穷大或 NaN
}
✅ 技巧3:类型检查
Class<?> type = someObject.getClass();
if (type == Float.TYPE) {
System.out.println("是 float 基本类型");
}
常见错误
❌ 错误1:认为 MIN_VALUE
是最小可表示数
// 错误理解
// Float.MIN_VALUE 是最小**正**数,不是最负的数
float minPositive = Float.MIN_VALUE; // 1.4E-45
float maxNegative = -Float.MAX_VALUE; // -3.4E38 (最负的数)
❌ 错误2:直接比较 NaN
float value = Float.NaN;
// if (value == Float.NaN) { ... } // 永远为 false!
// 正确
if (Float.isNaN(value)) { ... }
❌ 错误3:混淆 SIZE
和 BYTES
System.out.println(Float.SIZE); // 32 (bits)
System.out.println(Float.BYTES); // 4 (bytes)
注意事项
NaN
不等于任何值:包括它自己,必须用 Float.isNaN()
检查。
- 无穷大参与运算:有定义的规则(如
∞ + ∞ = ∞
,∞ - ∞ = NaN
)。
- 非正规数:
MIN_VALUE
到 MIN_NORMAL
之间的数是非正规数,精度较低。
- 类型常量:
Float.TYPE
是 float.class
,用于反射和类型比较。
总结
常量 |
用途 |
值/类型 |
MIN_VALUE |
最小正非正规数 |
1.4E-45f |
MAX_VALUE |
最大有限值 |
3.4028235E38f |
MIN_NORMAL |
最小正规数 |
1.17549435E-38f |
MAX_EXPONENT |
最大指数 |
127 |
MIN_EXPONENT |
最小指数 |
-126 |
SIZE |
位数 |
32 |
BYTES |
字节数 |
4 |
TYPE |
基本类型 Class |
float.class |
NaN |
非数字 |
NaN |
POSITIVE_INFINITY |
正无穷大 |
Infinity |
NEGATIVE_INFINITY |
负无穷大 |
-Infinity |