JDK源码解析---Float

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.构造方法

  1. 参数为float,将falot封装成Float对象
public Float(float value) {
    this.value = value;
}
  1. 参数为double
public Float(double value) {
    this.value = (float)value;
}
  1. 参数为String 将字符串解析为float然后赋值给成员变量。
public Float(String s) throws NumberFormatException {
    value = parseFloat(s);
}

5.toString/toHexString

  1. toString 将float类型的数值表示转换成String类型
public String toString() {
		return Float.toString(value);
}
public static String toString(float f) {
    return FloatingDecimal.toJavaFormatString(f);
}
  1. 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

  1. isNaN(float v)

只有当v为Nan的时候才返回true

//对象调用
public boolean isNaN() {
  	return isNaN(value);
}
//类名调用
public static boolean isNaN(float v) {
    return (v != v);
}
  1. isInfinite(float v)

判断是否是无穷大或者无穷小

//对象调用
public boolean isInfinite() {
  	return isInfinite(value);
}
//类名调用
public static boolean isInfinite(float v) {
    return (v == POSITIVE_INFINITY) || (v == NEGATIVE_INFINITY);
}
  1. 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);
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
jdk-11-windows是指Java开发工具包(Java Development Kit)的第11个版本,适用于Windows操作系统。JDK是使用Java语言进行开发的应用程序和软件的环境,它提供了许多工具和功能,可用于编写、编译和运行Java程序。 JDK-11包含了许多新的特性和改进,使得Java编程更加方便和高效。其中一项突出的特性是JVM(Java虚拟机)的性能改进,它可以提供更快速和更高效的执行速度。其他一些特性包括G1垃圾回收器的增强和适用于观察、诊断和监控Java程序的Java Flight Recorder和Java Mission Control工具等。 对于Windows用户来说,JDK-11提供了易于安装和使用的Windows平台上的开发环境。它包括了JRE(Java运行环境)和用于开发、调试和测试Java应用程序的工具集。通过JDK-11,开发人员可以利用Windows操作系统的优势和特性,进行快速、高效和可靠的Java开发。 此外,JDK-11还提供了许多与安全性和稳定性相关的改进。它包含了新的安全性特性,可以帮助开发人员保护他们的应用程序免受潜在的安全威胁。另外,JDK-11还包含了一些稳定性改进,可以提高应用程序的性能和可靠性。 总之,JDK-11-windows是适用于Windows操作系统的Java开发工具包的最新版本。它提供了许多新的特性和改进,使得Java开发更加方便、高效和安全。对于Windows用户来说,使用JDK-11可以提供更好的开发体验,使他们能够更轻松地创建出优秀的Java应用程序。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值