JDK源码-Float类

上节我们介绍过JDK源码-Double类
本节我们介绍Float,Float 类在对象中包装了一个基本类型 float 的值。此外,该类提供了多个方法,能在 float 类型与 String 类型之间互相转换,同时还提供了处理 float 类型时比较常用的常量和方法。

一、实现接口

Float类是基本类型float的包装类,继承了Number类,并且实现了Comparable接口

public final class Float extends Number implements Comparable<Float> 

二、构造方法

	//构造一个新分配的 Float 对象,它表示基本的 float 参数。
 	public Float(float value) {
        this.value = value;
    }
	//构造一个新分配的 Float 对象,它表示将 double 类型转换为 float 类型的参数。
    public Float(double value) {
        this.value = (float)value;
    }
	//构造一个新分配的 Float 对象,它表示将 String 类型参数解析为 float 值。
    public Float(String s) throws NumberFormatException {
        value = parseFloat(s);
    }

例如,以下代码分别使用以上 3 个构造方法获取 Float 对象:

Float float1=new Float(3.14145);    //以 double 类型的变量作为参数创建 Float 对象
Float float2=new Float(6.5);    //以 float 类型的变量作为参数创建 Float 对象
Float float3=new Float("3.1415");    //以 String 类型的变量作为参数创建 Float 对象

用来存放Float对象那float对应的值。

private final float value;

三、常用常量

	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; // 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 类中常量的使用:

float max_value=Float.MAX_VALUE;    //获取 float 类型可取的最大值
float min_value=Float.MIN_VALUE;    //获取 float 类型可取的最小值
float min_normal=Float.MIN_NORMAL;    //获取 float 类型可取的最小标准值
float size=Float.SIZE;    //获取 float 类型的二进制位

四、常用方法

toXXXString 系列

	//静态方法
	public static String toString(float f) {
        return FloatingDecimal.toJavaFormatString(f);
    }
    //静态方法返回float 参数的十六进制字符串表示形式
    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);
    }
    //实例方法内部调用  static String toString(float f)
    public String toString() {
        return Float.toString(value);
    }

valueOf方法

	//依赖parseFloat方法所以下面说跟valueOf(String)表现效果相同,本身就是一样
    public static Float valueOf(String s) throws NumberFormatException {
        return new Float(parseFloat(s));
    }

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

parseFloat(String s)

将数字字符串转换为 float 数值

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

isNaN方法

	//静态方法是否一个非数字(NaN) 值, 非数值 true
	public static boolean isNaN(float v) {
        return (v != v);
    }
    //实例方法依赖静态方法
	public boolean isNaN() {
        return isNaN(value);
    }

isInfinite和isFinite

	//静态方法是否是无穷大,是无穷大true
	public boolean isInfinite() {
        return isInfinite(value);
    }
    //静态方法是否是有限的浮点数,有限的true
    public boolean isInfinite() {
        return isInfinite(value);
    }

XXXValue系列

似之前介绍的其他数值类型全部都是强转,内部的 valuereturn (XXX)value;

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

equals(Object obj)

将此对象与指定对象进行比较,当且仅当参数不是 null 而是 Float 对象,且表示的 float 值与此对象表示的 float 值相同时,结果为 true

	public boolean equals(Object obj) {
        return (obj instanceof Float) && (floatToIntBits(((Float)obj).value) == floatToIntBits(value));
    }

hashCode方法

	//实例方法依赖静态方法
	@Override
    public int hashCode() {
        return Float.hashCode(value);
    }
	//静态方法获得一个value的hashcode值
    public static int hashCode(float value) {
        return floatToIntBits(value);
    }

compare和compareTo方法

	//实例方法两个对象进行大小比较,依赖于静态方法
 	public int compareTo(Float anotherFloat) {
        return Float.compare(value, anotherFloat.value);
    }
	//静态方法比较两个float f1< f2 小于0,f1 = f2 等于0 f1 > f2 大于0
    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)
    }

其他方法

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

五、总结

其实浮点数的表示形式与使用规范才是重点
Float只是float的包装,float也只是IEEE754 标准的一个实现,根本还是在于标准的理解


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值