Java-API简析_java.lang.Float类(基于 Latest JDK)(浅析源码)

【版权声明】未经博主同意,谢绝转载!(请尊重原创,博主保留追究权)
https://blog.csdn.net/m0_69908381/article/details/131129886
出自【进步*于辰的博客

1、概述

继承关系:

  • java.lang.Object
    • java.lang.Number
      • java.lang.Float

所有已实现的接口:
Serializable、Comparable<Float>


public final class Float extends Number implements Comparable<Float>

Float 类在对象中包装了一个 float 基本类型的值。Float 类型的对象包含一个 float 类型的字段。

此外,此类提供了几种方法,可在 float 类型和 String 类型之间互相转换,并且还提供了处理 float 类型时非常有用的其他一些常量和方法。

从以下版本开始:
JDK1.0
另请参见:
序列化表格

2、字段摘要

2.1 static float MAX_VALUE

保持 float 类型的最大正有限大值的常量,最大正有限大值为 (2 - 2-23) * 2127

public static final float MAX_VALUE = 0x1.fffffeP+127f; // 3.4028235e+38f

2.2 static float MIN_VALUE

保持 float 类型数据的最小正非零值的常量,最小正非零值为 2-149

public static final float MIN_VALUE = 0x0.000002P-126f; // 1.4e-45f

如何计算MAX_VALUE/MIN_VALUE的值?这涉及到浮点数的二进制。推荐一篇博文《浮点数(小数)在计算机中如何用二进制存储?》。

当然,尽管已明了如何计算浮点数的二进制,但具体如何计算MAX_VALUE/MIN_VALUE的值,暂无头绪。

2.3 static int SIZE

表示一个 float 值所使用的位数。

public static final int SIZE = 32;// 占4个字节

2.4 static Class<Float> TYPE

表示 float 基本类型的 Class 实例。

public static final Class<Float> TYPE = (Class<Float>) Class.getPrimitiveClass("float");

getPrimitiveClass()Class类的第3.1项,即返回float.class

2.5 其他常量

public static final float NaN = 0.0f / 0.0f;// 非数字

NaN是“非数字”,如:正负无穷大、Math.sqrt(负数)Integer.parseInt(字符串),表示“无效数字”,实际上仍是数值类型。

public static final float POSITIVE_INFINITY = 1.0f / 0.0f;// 正无穷大
public static final float NEGATIVE_INFINITY = -1.0f / 0.0f;// 负无穷大

理论上,正 / 负无穷大也是NaN,但是:

Float.isNaN(Float.POSITIVE_INFINITY);// false
Float.isNaN(Float.NEGATIVE_INFINITY);// false
Float.isNaN(Float.NaN);// true

暂不知为何。

3、构造方法摘要

属性说明:

private final float value;

3.1 double value

构造一个新分配的 Float 对象,它表示转换为 float 类型的参数。

3.2 float value

构造一个新分配的 Float 对象,它表示基本的 float 参数。

3.3 String s

构造一个新分配的 Float 对象,它表示用字符串表示的 float 类型的浮点值。

public Float(String s) throws NumberFormatException {
    value = parseFloat(s);// 调用 4.17项,String → float
}

4、方法摘要

4.1 byte byteValue()

返回这个 Float 值对应的 byte 值(它被强制转换为一个 byte)。

4.2 static int compare(float f1, float f2)

比较两个指定的 float 值。

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)
}

后续解析。

4.3 int compareTo(Float anotherFloat)

从数字上比较两个 Float 对象。

public int compareTo(Float anotherFloat) {
    return Float.compare(value, anotherFloat.value);// 调用上1项
}

4.4 double doubleValue()

返回这个 Float 对象的 double 值。

4.5 boolean equals(Object obj)

将这个对象与指定的对象进行比较。

4.6 static int floatToIntBits(float value)

根据 IEEE 754 的浮点“单一形式”中的位布局,返回指定浮点值的表示形式。

publicstatic int floatToIntBits(float value) {
    int result = floatToRawIntBits(value);
    // Check for NaN based on values of bit fields, maximum
    // exponent and nonzero significand.
    if ( ((result & FloatConsts.EXP_BIT_MASK) ==
          FloatConsts.EXP_BIT_MASK) &&
         (result & FloatConsts.SIGNIF_BIT_MASK) != 0)
        result = 0x7fc00000;
    return result;
}

后续解析。

由第9项可知,此方法返回的是value对应的hashcode

4.7 static native int floatToRawIntBits(float value)

根据 IEEE 754 的浮点“单一形式”中的位布局,返回指定浮点值的表示形式,并保留非数字 (NaN) 值。

示例:

int hash = Float.floatToIntBits(2023.5f);
int xx = Float.floatToRawIntBits(2023.5f);
sout hash;// 打印:1157427200
sout xx;// 打印:1157427200

可见,2次打印的结果一致。可认为,在一般情况下,此方法与上1项的作用相同。

4.8 float floatValue()

返回这个 Float 对象的 float 值。

4.9 int hashCode()

返回这个 Float 对象的哈希码。

public int hashCode() {
    return Float.hashCode(value);
}

public static int hashCode(float value) {
    return floatToIntBits(value);// 调用第 6项
}

4.10 static native float intBitsToFloat(int bits)

返回对应于给定的位表示形式的 float 值。

示例:

int hash = Float.floatToIntBits(2023.5f);
sout Float.intBitsToFloat(hash);// 打印:2023.5

由第6项可知,floatToIntBits()返回的是hashcode。因此,此方法返回的是bits对应的 float 值。

4.11 int intValue()

返回这个 Float 值对应的 int 值(它被强制转换为一个 int)。

4.12 boolean isInfinite()

如果这个 Float 值的大小是无穷大,则返回 true,否则返回 false。

public boolean isInfinite() {
    return isInfinite(value);// 调用下 1项
}

4.13 static boolean isInfinite(float v)

如果指定数字的大小是无穷大,则返回 true,否则返回 false。

public static boolean isInfinite(float v) {
    return (v == POSITIVE_INFINITY) || (v == NEGATIVE_INFINITY);
}

后续解析。

4.14 boolean isNaN()

如果这个 Float 值是一个非数字 (NaN) 值,则返回 true,否则返回 false。

public boolean isNaN() {
    return isNaN(value);// 见下1项
}

4.15 static boolean isNaN(float v)

如果指定的数字是一个非数字 (NaN) 值,则返回 true,否则返回 false。

public static boolean isNaN(float v) {
    return (v != v);
}

尚不理解。

4.16 long longValue()

返回这个 Float 值对应的 long 值(它被强制转换为一个 long)。

4.17 static float parseFloat(String s)

返回一个新的 float 值,该值被初始化为用指定 String 表示的值,这与 Float 类的 valueOf() 产生的值类似。

public static float parseFloat(String s) throws NumberFormatException {
    return FloatingDecimal.parseFloat(s);
}

后续解析。

valueOf()见第23项。

4.18 short shortValue()

返回这个 Float 值对应的 short 值(它被强制转换为一个 short 值)。

4.19 static String toHexString(float f)

返回 float 参数的十六进制字符串表示形式。(暂未可知)

4.20 String toString()

返回这个 Float 对象的字符串表示形式。

public String toString() {
    return Float.toString(value);// 调用下 1项
}

4.21 static String toString(float f)

返回 float 参数的字符串表示形式。

public static String toString(float f) {
    return FloatingDecimal.toJavaFormatString(f);
}

后续解析。

4.22 static float valueOf(float f)

返回表示指定的 float 值的 Float 实例。

public static Float valueOf(float f) {
    return new Float(f);
}

4.23 static float valueOf(String s)

返回保持用参数字符串 s 表示的 float 值的 Float 对象。

public static Float valueOf(String s) throws NumberFormatException {
    return new Float(parseFloat(s));
}

parseFloat()见第17项。

4.24 static int hashCode(float value)

返回指定 float 值的哈希码。

public static int hashCode(float value) {
    return floatToIntBits(value);// 调用第 6项
}

最后

如果大家需要Java-API文档,我上传了《Java-API文档-包含5/8/11三个版本》。


本文暂缓更新。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

进步·于辰

谢谢打赏!!很高兴可以帮到你!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值