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类里面的方法