[⼋]基础数据类型之Double详解
Double 基本数据类型double  的包装类
Double 类型的对象包含⼀个 double 类型的字段
属性简介
⽤来以⼆进制补码形式表⽰ double 值的⽐特位数public static final int SIZE = 64;
⼆进制补码形式表⽰ double 值的字节数public static final int BYTES = SIZE / Byte.SIZE;
表⽰基本类型 double 的 Class 实例public static final Class<Double>  TYPE = (Class<Double>) PrimitiveClass("double");
能够表⽰的最⼤值
只有标准化⼀种形式,也就是前⽂提到过的
public static final double MAX_VALUE = 0x1.fffffffffffffP+1023;
标准化的最⼩值public static final double MIN_NORMAL = 0x1.0p-1022;
最⼩值还有⾮标准化的形式public static final double MIN_VALUE = 0x0.0000000000001P-1022;正⽆穷
等同于
Double.longBitsToDouble(0x7ff0000000000000L)
public static final double POSITIVE_INFINITY = 1.0 / 0.0;
负⽆穷
等同于
Double.longBitsToDouble(0xfff0000000000000L).
public static final double NEGATIVE_INFINITY = -1.0 / 0.0
NaN
not a number
等同于
Double.longBitsToDouble(0x7ff8000000000000L)
public static final double NaN = 0.0d / 0.0
指数真值的有效的最⼤值public static final int MAX_EXPONENT = 1023
指数真值的有效的最⼩值public static final int MIN_EXPONENT = -1022
这些属性,看过浮点数简介的话,可以很清晰的理解,再次说明下,但凡本⼈的系列⽂章,全部都是有顺序的
构造⽅法
Double 依然提供了根据基本类型double以及double的String形式构造
String形式依然借助于parseXXX形式 parseDouble
Double(double value)
Double(String s)
常⽤⽅法
字符串是什么字段类型
对于浮点数,有⼀些额外的属性⽅法
我们浮点数介绍中,对于浮点数的表⽰形式进⾏了介绍
Double提供了对于指定值的表⽰形式的获取⽅法, 这表⽰形式也就是是⼀个64位的⼆进制位序列
Double 获取表⽰形式
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
longBitsToDouble(long)
返回对应于给定位表⽰形式的 double 值
如果参数是 0x7ff0000000000000L,则结果为正⽆穷⼤
如果参数是 0xfff0000000000000L,则结果为负⽆穷⼤
如果参数值在 0x7ff0000000000001L 到 0x7fffffffffffffffL 之间或者在 0xfff0000000000001L 到 0xffffffffffffffffL 之间,则结果为NaN
浮点数有⼏种特殊的表⽰,⽐如⽆穷 NaN等
额外的,也提供了⼀些相关的⽅法
static boolean isNaN(double v)静态⽅法
是否⼀个⾮数字 (NaN) 值⾮数值 true
static boolean isFinite(double d)静态⽅法
是否是有限的浮点数有限的true
static boolean isInfinite(double v)静态⽅法
是否是⽆穷⼤是⽆穷⼤  true
boolean isInfinite()实例⽅法
依赖静态⽅法
boolean isNaN()实例⽅法
依赖静态⽅法⽐较
static int compare(double d1, double d2)静态⽅法
⽐较两个double d1 < d2 ⼩于0 d1 = d2 等于0 d1 > d2 ⼤于0
d1 > d2 ⼤于0
int compareTo(Double anotherDouble)实例⽅法
两个对象进⾏⼤⼩⽐较,依赖于静态⽅法parseXXX系列
字符串解析为基本类型,
不需要对象,所以都是静态⽅法
返回⼀个字符串形式表⽰的基本类型double
表现效果同valueOf(String),不过valueOf 返回的是对象
如果不包含可以解析的字符串将会抛出异常
底层依赖sun.misc.FloatingDecimal
valueOf系列
把基本基本类型包装为对象
⽤来创建获得对象,所以⽆需对象,全都是静态⽅法
不同于之前介绍的整数数值,他们都有缓冲
Double v不存在缓存,valueOf也是直接new 对象
static Double valueOf(double d)
static Double valueOf(String s)依赖parseDouble⽅法
所以上⾯说跟valueOf(String)表现效果相同,本⾝就是⼀样Double没有 decode⽅法
XXXValue系列
类似之前介绍的其他数值类型全部都是强转内部的  value return (XXX)value;byteValue() shortValue() intValue() longValue() floatValue() doubleValue()
toString  toXXXString  系列
toString(double)
toString()
toHexString(double)
static String toString(double d)静态⽅法
String toString()实例⽅法
内部调⽤  static String toString(double d)
static String toHexString(double d)静态⽅法
返回 double参数的⼗六进制字符串表⽰形式
API帮助⽂档中对于字符的转换有明确的规定,可以仔细研究下
⽰例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
static int hashCode(double value)静态⽅法
获得⼀个value的hashcode值
int hashCode()实例⽅法
依赖静态⽅法
其他⽅法
sum(double, double)
max(double, double)
min(double, double)
总结
其实浮点数的表⽰形式与使⽤规范才是重点
就像Float似的, Double只是double的包装,double也只是IEEE754 标准的⼀个实现,根本还是在于标准的理解Double  和 Float 提供的⽅法结构基本上是⼀样的,毕竟都是浮点数,标准也都是IEEE754
⾄此,已经介绍了,基本类型包装类中的数值部分
也就是Byte  Short  Integer Long Float Double  他们作为数值有很多类似的⽅法
这些类似的⽅法属性也可以说是作为数值类型的共性
个⼈认为,到共性能够更好理解运⽤ java提供的类与功能

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。