java源码阅读--Double

jdk文档说明:

Double类将基本类型Double的值封装在对象中。Double类型的对象包含一个类型为Double的字段。
此外,该类还提供了几个方法,用于将double转换为字符串,将字符串转换为double,以及在处理double时有用的其他常量和方法。

java源码里面几个封装类的数字类都是继承Number,所以基本的方法也差不多,上面jdk文档也充分表达了该类的作用。

属性

public static final double POSITIVE_INFINITY = 1.0 / 0.0;
public static final double NEGATIVE_INFINITY = -1.0 / 0.0;
public static final double NaN = 0.0d / 0.0;
  • POSITIVE_INFINITY 表示正无穷,值为0x7ff0000000000000L;标准定义指数域全为1,尾数域全为0
  • NEGATIVE_INFINITY 表示负无穷,值为0xfff0000000000000L;标准定义指数域全为1,尾数域全为0
  • NaN 英文缩写,Not-a-Number,标准定义为 指数域全为1,尾数域不全为0
public static final double MAX_VALUE = 0x1.fffffffffffffP+1023; // 1.7976931348623157e+308
public static final double MIN_NORMAL = 0x1.0p-1022; // 2.2250738585072014E-308
public static final double MIN_VALUE = 0x0.0000000000001P-1022; // 4.9e-324
  • MAX_VALUE 最大规约数为0x1.fffffffffffffP+1023,这里是十六进制浮点数表示,也就是0x7fefffffffffffffL,也是(2 - Math.pow(2, -52) * Math.pow(2, 1023)),计算值为1.7976931348623157e+308
  • MIN_NORMAL 最小的规约数为0x1.0p-1022,这里是十六进制浮点数表示,也就是0x0010000000000000L,也是Math.pow(2, -1022),计算值为2.2250738585072014E-308
  • MIN_VALUE 最小非规约数为0x0.0000000000001P-1022,这里是十六进制浮点数表示,也就是0x1L,也是Math.pow(2, -1074),计算值为4.9e-324
public static final int MAX_EXPONENT = 1023;
public static final int MIN_EXPONENT = -1022;
  • 定义了 bit 位数 MAX_EXPONENT 表示了最大的指数值,为1023
  • MIN_EXPONENT 表示了最小的指数值,为-1022
public static final int SIZE = 64;
  • 定义了 bit 位数
public static final int BYTES = SIZE / Byte.SIZE;
  • 定义了Double对象的字节数,计算值固定为8
@SuppressWarnings("unchecked")
public static final Class<Double>   TYPE = (Class<Double>) Class.getPrimitiveClass("double");
  • 获取类信息,Double.TYPE == double.class两者是等价的
private final double value;
  • Double是double的包装类,这里存放了对应的double数据值

方法

构造方法

public Double(double value) {
  this.value = value;
}

public Double(String s) throws NumberFormatException {
  value = parseDouble(s);
}

可以传入double或者String类型参数,String参数的构造方法内部会调用parseDouble方法进行处理。

常规方法

(1)byteValue():在收缩原语转换之后,以字节的形式返回此Double的值

   public byte byteValue() {
        return (byte)value;
    }

该方法直接把 double value 强制转换成byte类型

public class Test {
    public static void main(String[] args) {
        Double d = 1.2;
        System.out.println(d.byteValue());
    }
}
输出 1

(2)static int compare(double d1, double d2):比较两个指定的双精度值

    public static int compare(double d1, double d2) {
        if (d1 < d2)
            return -1;           // Neither val is NaN, thisVal is smaller
        if (d1 > d2)
            return 1;            // Neither val is NaN, thisVal is larger

        // Cannot use doubleToRawLongBits because of possibility of NaNs.
        long thisBits    = Double.doubleToLongBits(d1);
        long anotherBits = Double.doubleToLongBits(d2);

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

该静态方法先进行两个double值进行比较,返回-1或者1,后续调用本地方法Double.doubleToLongBits()转换成long型进行比较
(3)Double.sum,Double.max和Double.min分别是对a,b两个double值进行求和,最大值和最小值,调用的是Math类里面的方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值