Double 类型的对象包含一个 double 类型的字段。 — 1 —
属性简介
这些属性,看过浮点数简介的话,可以很清晰的理解。再次说明下,但凡本人的系列文章,全部都是有顺序的 。
— 2 —
构造方法
Double 依然提供了根据基本类型double以及double的String形式构造。String形式依然借助于parseXXX形式 parseDouble。
Double(double value)
Double(String s)
— 3 —
常用方法
对于浮点数,有一些额外的属性方法,我们浮点数介绍中,对于浮点数的表示形式进行了介绍。Double提供了对于指定值的表示形式的获取方法, 这表示形式也就是是一个64位的二进制位序列
Double获取表示形式
对于获取表示形式 提供了两种形式的方法,主要是针对于非数字的NaN的不同表示。
他们可以与longBitsToDouble 可以进行互相转换。
doubleToRawLongBits(double)根据 IEEE 754 浮点“双精度格式”位布局,返回指定浮点值的表示形式,并保留 NaN 值如果参数是正无穷大,则结果为 0x7ff0000000000000L如果参数是负无穷大,则结果为 0xfff0000000000000L如果参数是 NaN,则结果是表示实际 NaN 值的 long 整数 与 doubleToLongBits 方法不同doubleToRawLongBits 并没有将 NaN 编码为一个“规范的”NaN 值 在所有情况下,结果都是一个 long 整数将其赋予 longBitsToDouble(long) 方法将生成一个与 doubleToRawLongBits 的参数相同的浮点值本地方法
doubleToLongBits(double)根据 IEEE 754 浮点双精度格式 ("double format") 位布局,返回指定浮点值的表示形式 如果参数是正无穷大,则结果为 0x7ff0000000000000L如果参数是负无穷大,则结果为 0xfff0000000000000L如果参数是 NaN,则结果为 0x7ff8000000000000L 在所有情况下,结果都是一个 long 整数将其赋予 longBitsToDouble(long) 方法将生成一个与 doubleToLongBits 的参数相同的浮点值(所有 NaN 值被压缩成一个“规范”NaN 值时除外)也就是NaN的处理不一样,此方法将NaN全部规范化为指定固定的值依赖 doubleToRawLongBits
表示形式转换为Double
longBitsToDouble(long)返回对应于给定位表示形式的 double 值
如果参数是 0x7ff0000000000000L,则结果为正无穷大;如果参数是 0xfff0000000000000L,则结果为负无穷大;如果参数值在 0x7ff0000000000001L 到 0x7fffffffffffffffL 之间或者在 0xfff0000000000001L 到 0xffffffffffffffffL 之间,则结果为 NaN;
其他表示形式
浮点数有几种特殊的表示,比如 无穷 NaN等。额外的,也提供了一些相关的方法。
比较
static int compare(double d1, double d2)静态方法
比较两个double
d1 < d2 小于0
d1 = d2 等于0
d1 > d2 大于0
int compareTo(Double anotherDouble)实例方法
两个对象进行大小比较,依赖于静态方法
parseXXX系列
字符串解析 为 基本类型,不需要对象,所以都是静态方法。返回一个字符串形式表示的基本类型double
表现效果同valueOf(String),不过valueOf 返回的是对象
如果不包含可以解析的字符串将会抛出异常,底层依赖sun.misc.FloatingDecimal
valueOf系列
把基本基本类型 包装为对象。用来创建获得对象,所以无需对象,全都是静态方法。 不同于之前介绍的整数 数值,他们都有缓冲,Double不存在缓存,valueOf也是直接new 对象。
static Double valueOf(double d)
static Double valueOf(String s)依赖parseDouble方法
所以上面说跟valueOf(String)表现效果相同,本身就是一样
Float没有 decode方法
XXXValue系列
类似之前介绍的其他数值类型,全部都是强转内部的value,return (XXX)value;
byteValue()shortValue()intValue()longValue()floatValue()doubleValue()
toString toXXXString 系列
toString系列好像没什么好说的,又好像有很多要说的,用到的时候,对于格式字符的规定有疑惑直接查看API。
equals
boolean equals(Object obj)将此对象与指定对象比较当且仅当参数不是 null 而是 Double 对象,且表示的 Double 值与此对象表示的 double 值相同时,结果为 true为此,当且仅当将方法 doubleToLongBits(double) 应用于两个值所返回的 long 值相同时,才认为这两个 double 值相同注意,在大多数情况下,对于 Double 类的两个实例 d1 和 d2,当且仅当 d1.doubleValue() == d2.doubleValue()为 true 时,d1.equals(d2) 的值才为 true 但是,有以下两种例外情况:如果 d1 和 d2 都表示 Double.NaN,那么即使 Double.NaN==Double.NaN 值为 false,equals 方法也将返回 true如果 d1 表示 +0.0 而 d2 表示 -0.0,或者相反,那么即使 +0.0==-0.0 值为 true,equals 测试也将返回 false此定义使得哈希表得以正确操作
hashCode
其他方法
— 4 —
总结
其实浮点数的表示形式与使用规范才是重点。就像Float似的,Double只是double的包装,double也只是IEEE754 标准的一个实现,根本还是在于标准的理解。Double和Float 提供的方法结构基本上是一样的,毕竟都是浮点数,标准也都是IEEE754 。 至此,已经介绍了,基本类型包装类中的数值部分,也就是Byte Short Integer Long Float Double 他们作为数值有很多类似的方法,这些类似的方法属性也可以说是作为数值类型的共性。个人认为,找到共性能够更好理解运用 java提供的类与功能。你看,本篇的Double与前面的Float某方面讲的话,是一样的~~~
https://mp.weixin.qq.com/s/Lu13fevQKJ1uTcmQaQa9og