文章目录
1.概述
Float是float的包装类,用于表示单精度浮点数。Float的表示方法和int、short、long不同。Float满足IEEE754浮点数表示法。Float表示的数值占4个字节,共32位。其中0到22位表示尾数部分;23到31位表示指数部分;32位为符号位。
Float被final修饰不能被继承。
2.类图
继承了Number,实现了数值类型转换的方法
实现了Comparabel接口对Float对象进行比较
实现了Serializable序列化接口
3.属性
静态常量 和Double类似
public static final float POSITIVE_INFINITY = 1.0f / 0.0f;//无穷大
public static final float NEGATIVE_INFINITY = -1.0f / 0.0f;//无穷小
public static final float NaN = 0.0f / 0.0f;//非数值
public static final float MAX_VALUE = 0x1.fffffeP+127f; // 最大值 3.4028235e+38f
public static final float MIN_NORMAL = 0x1.0p-126f; // 正常情况下最小值1.17549435E-38f
public static final float MIN_VALUE = 0x0.000002P-126f; // float实际可达到的最小值 1.4e-45f
public static final int MAX_EXPONENT = 127;//最大指数
public static final int MIN_EXPONENT = -126;//最小指数
public static final int SIZE = 32;//占用的位数
public static final int BYTES = SIZE / Byte.SIZE;//占用的字节数
@SuppressWarnings("unchecked")
public static final Class<Float> TYPE = (Class<Float>) Class.getPrimitiveClass("float");//Float.class对象
private static final long serialVersionUID = -2671257302660747028L;// 序列化版本号
私有变量
private final float value;//用于存储Float对象的表示数值
4.构造方法
- 参数为float,将falot封装成Float对象
public Float(float value) {
this.value = value;
}
- 参数为double
public Float(double value) {
this.value = (float)value;
}
- 参数为String 将字符串解析为float然后赋值给成员变量。
public Float(String s) throws NumberFormatException {
value = parseFloat(s);
}
5.toString/toHexString
- toString 将float类型的数值表示转换成String类型
public String toString() {
return Float.toString(value);
}
public static String toString(float f) {
return FloatingDecimal.toJavaFormatString(f);
}
- toHexString 转换成16进制的String对象
public static String toHexString(float f) {
if (Math.abs(f) < FloatConsts.MIN_NORMAL
&& f != 0.0f ) {// float subnormal
// Adjust exponent to create subnormal double, then
// replace subnormal double exponent with subnormal float
// exponent
String s = Double.toHexString(Math.scalb((double)f,
/* -1022+126 */
DoubleConsts.MIN_EXPONENT-
FloatConsts.MIN_EXPONENT));
return s.replaceFirst("p-1022$", "p-126");
}
else // double string will be the same as float string
return Double.toHexString(f);
}
6.valueOf
//将String解析为float 然后封装成对象返回
public static Float valueOf(String s) throws NumberFormatException {
return new Float(parseFloat(s));
}
//将float封装成对象,和直接调用构造方法没什么区别
public static Float valueOf(float f) {
return new Float(f);
}
7.parseFloat
// 将字符串解析为float数值返回
public static float parseFloat(String s) throws NumberFormatException {
return FloatingDecimal.parseFloat(s);
}
8.isXXX
- isNaN(float v)
只有当v为Nan的时候才返回true
//对象调用
public boolean isNaN() {
return isNaN(value);
}
//类名调用
public static boolean isNaN(float v) {
return (v != v);
}
- isInfinite(float v)
判断是否是无穷大或者无穷小
//对象调用
public boolean isInfinite() {
return isInfinite(value);
}
//类名调用
public static boolean isInfinite(float v) {
return (v == POSITIVE_INFINITY) || (v == NEGATIVE_INFINITY);
}
- isFinite(float f)
判断是否是在能表示的范围内
public static boolean isFinite(float f) {
return Math.abs(f) <= FloatConsts.MAX_VALUE;
}
9.XXXValue
数值类型转换
public byte byteValue() {
return (byte)value;
}
public short shortValue() {
return (short)value;
}
public int intValue() {
return (int)value;
}
public long longValue() {
return (long)value;
}
public float floatValue() {
return value;
}
public double doubleValue() {
return (double)value;
}
10.hashCode
计算Float的hashCode
public int hashCode() {
return Float.hashCode(value);
}
public static int hashCode(float value) {
return floatToIntBits(value);
}
public static int floatToIntBits(float value) {
int result = floatToRawIntBits(value);//native方法
if ( ((result & FloatConsts.EXP_BIT_MASK) ==
FloatConsts.EXP_BIT_MASK) &&
(result & FloatConsts.SIGNIF_BIT_MASK) != 0)
result = 0x7fc00000;
return result;
}
11.比较
equals(Object obj)
先判断类型是否相同,在判断数值是否相同
public boolean equals(Object obj) {
return (obj instanceof Float)
&& (floatToIntBits(((Float)obj).value) == floatToIntBits(value));
}
compareTo(Float anotherFloat)
调用者小 返回-1 相同返回0 调用者大返回1
public int compareTo(Float anotherFloat) {
return Float.compare(value, anotherFloat.value);
}
public static int compare(float f1, float f2) {
if (f1 < f2)
return -1; // Neither val is NaN, thisVal is smaller
if (f1 > f2)
return 1; // Neither val is NaN, thisVal is larger
// Cannot use floatToRawIntBits because of possibility of NaNs.
int thisBits = Float.floatToIntBits(f1);
int anotherBits = Float.floatToIntBits(f2);
return (thisBits == anotherBits ? 0 : // Values are equal
(thisBits < anotherBits ? -1 : // (-0.0, 0.0) or (!NaN, NaN)
1)); // (0.0, -0.0) or (NaN, !NaN)
}
12.其他方法
public static float sum(float a, float b) {
return a + b;
}
public static float max(float a, float b) {
return Math.max(a, b);
}
public static float min(float a, float b) {
return Math.min(a, b);
}