• 源码分析


    // 定义变量用来接收float值
    private final float value;

    // 构造函数,传入一个value
    public Float(float value) {
    this.value = value;
    }
    // 构造函数,传入一个double值
    public Float(double value) {
    this.value = (float)value;
    }
    // 构造函数,传入一个字符串
    public Float(String s) throws NumberFormatException {
    value = parseFloat(s);
    }

    // 判断是否是nan,这里永远为false
    public boolean isNaN() {
    return isNaN(value);
    }

    // 是否是无限的
    public boolean isInfinite() {
    return isInfinite(value);
    }
    // 将float数据转换成其它类型的数据
    public String toString() {
    return Float.toString(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;
    }

    // 获取hashCode值
    @Override
    public int hashCode() {
    return Float.hashCode(value);
    }

    // 计算hashCode值
    public static int hashCode(float value) {
    return floatToIntBits(value);
    }

    // 比较两个float数据的大小
    public boolean equals(Object obj) {
    return (obj instanceof Float)
    && (floatToIntBits(((Float)obj).value) == floatToIntBits(value));
    }

    // 将falot转换成int的byte值
    public static int floatToIntBits(float value) {
    int result = floatToRawIntBits(value);
    // 根据位字段,最大指数和非零有效数的值检查NaN。
    if ( ((result & FloatConsts.EXP_BIT_MASK) ==
    FloatConsts.EXP_BIT_MASK) &&
    (result & FloatConsts.SIGNIF_BIT_MASK) != 0)
    result = 0x7fc00000;
    return result;
    }

    // ?????????????????
    public static native int floatToRawIntBits(float value);
    public static native float intBitsToFloat(int bits);

    // 比较两个float数据
    public int compareTo(Float anotherFloat) {
    return Float.compare(value, anotherFloat.value);
    }

    // 比较两个float数据
    public static int compare(float f1, float f2) {
    if (f1 < f2)
    return -1;// val都不是NaN,this.value更小
    if (f1 > f2)
    return 1;// val都不是NaN,this.value更大
    // 由于NaNs的可能性,不能使用floatToRawIntBits。
    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);
    }
    private static final long serialVersionUID = -2671257302660747028L;
    }
    --------------------- 

  • 相关阅读:
    Spring AOP概念理解 (通俗易懂)
    分享一下几个关于ssm及spring原理的专栏链接
    liux高级常用命令
    Linux基础常用命令
    SP1716 GSS3
    HDU6579 Operation
    CF1205C Palindromic Paths
    CF1213G Path Queries
    CF1213F Unstable String Sort
    CF1213E Two Small Strings
  • 原文地址:https://www.cnblogs.com/hyhy904/p/11277907.html
Copyright © 2020-2023  润新知