Double类是原始类型double的包装类,它包含若干有效处理double值的方法,如将其转换为字符串表示形式,反之亦然。Double类的对象可以包含一个double值。

Double类包装原始类型的值 double中的对象。类型的对象 Double包含一个类型为的字段 double

此外,这个类提供了转换的几种方法 doubleStringString一个double带有打交道时,以及其他常量和方法有用 double

一、类定义

public final class Double extends Number implements Comparable<Double> {}
  • 类被声明为final的,表示不能被继承;
  • 继承了Number抽象类,可以用于数字类型的一系列转换;
  • 实现了Comparable接口,强行对实现它的每个类的对象进行整体排序

二、成员变量

    //一个保持正无穷大的 double 类型常数public static final double POSITIVE_INFINITY = 1.0 / 0.0;//一个保持负无穷大的 double 类型常数public static final double NEGATIVE_INFINITY = -1.0 / 0.0;//值为NaN(Not a Number,非数)的一个 double 类型常数public static final double NaN = 0.0d / 0.0;//一个double类型常量存储double的有限最大值public static final double MAX_VALUE = 0x1.fffffffffffffP+1023; // 1.7976931348623157e+308//一个double类型常量存储double的有限的最小正数public static final double MIN_NORMAL = 0x1.0p-1022; // 2.2250738585072014E-308//保持最小双精度类型的最小非零的常数public static final double MIN_VALUE = 0x0.0000000000001P-1022; // 4.9e-324//double变量可以拥有的最大指数值。public static final int MAX_EXPONENT = 1023;//double变量可以拥有的最小指数值。public static final int MIN_EXPONENT = -1022;//一个double类型变量为64位,即8个字节。public static final int SIZE = 64;//用于表示双精度值(double值)的字节数public static final int BYTES = SIZE / Byte.SIZE;//该类的实例表示基本类型double。@SuppressWarnings("unchecked")public static final Class<Double>   TYPE = (Class<Double>) Class.getPrimitiveClass("double");

三、构造器

//构造一个新分配的Double对象,该对象表示原始double参数。
public Double(double value) {this.value = value;}
//构造一个新分配的Double对象,该对象表示double 字符串表示的类型的浮点值。
public Double(String s) throws NumberFormatException {value = parseDouble(s);}

四、常用方法

  1. toString():

    返回对应于double值的字符串。

    public String toString(double d){return FloatingDecimal.toJavaFormatString(d);}public String toString() {return toString(value);}
    
  2. valueOf():

    返回使用提供的值初始化的Double对象。

        public static Double valueOf(String s) throws NumberFormatException {return new Double(parseDouble(s));}public static Double valueOf(double d) {return new Double(d);}
    
  3. parseDouble():

    通过解析字符串返回double值。与valueOf()不同,因为它返回一个原始double值,valueOf()返回Double对象。

        public static double parseDouble(String s) throws NumberFormatException {return FloatingDecimal.parseDouble(s);}
    
  4. byteValue():
    public byte byteValue(){ return (byte)value;}
    
  5. shortValue():

    返回与此双重对象相对应的短值。

     public short shortValue(){ return (short)value;}
    
  6. intValue():

    返回与此双重对象相对应的int值。

     public int intValue(){ return (int)value;}
    
  7. longValue():

    返回与此双重对象相对应的长整型值。

     public long longValue(){ return (long)value;}
    
  8. doubleValue():

    返回与此双重对象相对应的double值。

    public double doubleValue(){ return value;}
    
  9. floatValue():

    返回与此双重对象相对应的浮点值。

     public float floatValue() {return (float)value;}
    
  10. hashCode():

    返回对应于这个Double对象的哈希码。

     public int hashCode() {return Double.hashCode(value);}
    
  11. isNaN():

    如果所考虑的双对象不是数字,则返回true,否则返回false。

     public boolean isNaN() {return isNaN(value);}
    

    如果我们不需要创建任何双重对象,则可以使用另一种静态方法是NaN(double val)。它提供了与上述版本类似的功能。

     public static boolean isNaN(double val) {return (v != v);}
    
  12. toHexString():

    返回参数double值的十六进制表示形式。

        public static String toHexString(double d) {/** Modeled after the "a" conversion specifier in C99, section* 7.19.6.1; however, the output of this method is more* tightly specified.*/if (!isFinite(d) )// For infinity and NaN, use the decimal output.return Double.toString(d);else {// Initialized to maximum size of output.StringBuilder answer = new StringBuilder(24);if (Math.copySign(1.0, d) == -1.0)    // value is negative,answer.append("-");                  // so append sign infoanswer.append("0x");d = Math.abs(d);if(d == 0.0) {answer.append("0.0p0");} else {boolean subnormal = (d < DoubleConsts.MIN_NORMAL);// Isolate significand bits and OR in a high-order bit// so that the string representation has a known// length.long signifBits = (Double.doubleToLongBits(d)& DoubleConsts.SIGNIF_BIT_MASK) |0x1000000000000000L;// Subnormal values have a 0 implicit bit; normal// values have a 1 implicit bit.answer.append(subnormal ? "0." : "1.");// Isolate the low-order 13 digits of the hex// representation.  If all the digits are zero,// replace with a single 0; otherwise, remove all// trailing zeros.String signif = Long.toHexString(signifBits).substring(3,16);answer.append(signif.equals("0000000000000") ? // 13 zeros"0":signif.replaceFirst("0{1,12}$", ""));answer.append('p');// If the value is subnormal, use the E_min exponent// value for double; otherwise, extract and report d's// exponent (the representation of a subnormal uses// E_min -1).answer.append(subnormal ?DoubleConsts.MIN_EXPONENT:Math.getExponent(d));}return answer.toString();}}
    
  13. equals():

    用于比较两个Double对象的相等性。如果两个对象都包含相同的double值,则此方法返回true。只有在检查平等的情况下才能使用。在其他所有情况下,compareTo方法应该是首选。

        public boolean equals(Object obj) {return (obj instanceof Double)&& (doubleToLongBits(((Double)obj).value) ==doubleToLongBits(value));}
    
  14. compareTo():

    用于比较两个Double对象的数值相等性。这应该用于比较两个Double值的数值相等性,因为它会区分较小值和较大值。返回小于0,0的值,大于0的值小于,等于和大于。

    public int compareTo(Double anotherDouble) {return Double.compare(value, anotherDouble.value);}
    
  15. compare():

    用于比较两个原始double值的数值相等。因为它是一个静态方法,因此可以在不创建任何Double对象的情况下使用它。

    public int compareTo(Double anotherDouble) {return Double.compare(value, anotherDouble.value);}
    

五、总结

  1. 方法中大量使用了重载
  2. 多数方法都是用到了IEEE 754码
  3. IEEE 754码:

由于不同机器所选用的基数、尾数位长度和阶码位长度不同,因此对浮点数的表示有较大差别,这不利于软件在不同计算机之间的移植。为此,美国IEEE(电器及电子工程师协会)提出了一个从系统角度支持浮点数的表示方法,称为IEEE754标准(IEEE,1985),当今流行的计算机几乎都采用了这一标准。

JDK源码解析之 Java.lang.Double相关推荐

  1. JDK源码解析之 java.lang.Exception

    异常.是所有异常的基类,用于标识一般的程序运行问题.这些问题通常描述一些会被应用程序捕获的反常情况. 一.源码部分 //继承了java.lang.Throwable public class Exce ...

  2. JDK源码解析之 java.lang.Error

    java.lang.Error 错误.是所有错误的基类,用于标识严重的程序运行问题.这些问题通常描述一些不应被应用程序捕获的反常情况. 一.源码部分 //继承了java.lang.Throwable ...

  3. JDK源码解析之 java.lang.Thread

    位于java.lang包下的Thread类是非常重要的线程类,它实现了Runnable接口,今天我们来学习一下Thread类,在学习Thread类之前,先介绍与线程相关知识:线程的几种状态.上下文切换 ...

  4. JDK源码解析之 java.lang.Integer

    teger 基本数据类型int 的包装类 Integer 类型的对象包含一个 int 类型的字段 一.类定义 public final class Integer extends Number imp ...

  5. JDK源码解析之 Java.lang.String

    String 类代表字符串.Java 程序中的所有字符串字面值(如 "abc" )都作为此类的实例实现. 字符串是常量:它们的值在创建之后不能更改.字符串缓冲区支持可变的字符串.因 ...

  6. JDK源码解析之 Java.lang.Object

    Object类是Java中其他所有类的祖先,没有Object类Java面向对象无从谈起.作为其他所有类的基类,Object具有哪些属性和行为,是Java语言设计背后的思维体现. Object类位于ja ...

  7. JDK源码解析之 Java.lang.Compiler

    Compiler类提供支持Java到本机代码编译器和相关服务.在设计上,它作为一个占位符在JIT编译器实现. 一.源码部分 public final class Compiler {private C ...

  8. JDK源码解析之 java.lang.Class

    Java程序在运行时,Java运行时系统一直对所有的对象进行所谓的运行时类型标识. 这项信息纪录了每个对象所属的类.虚拟机通常使用运行时类型信息选准正确方法去执行,用来保存这些类型信息的类是Class ...

  9. JDK源码解析之 Java.lang.Float

    Float类是原始类型float的包装类,它包含若干有效处理浮点值的方法,如将其转换为字符串表示形式,反之亦然.Float类的一个对象可以包含一个浮点值 一.类定义 public final clas ...

最新文章

  1. android jason动画,Android 动画之Lottie动画使用
  2. 安装CocoaPods
  3. IDOC实例,消息方式的IDOC
  4. java中线程的生命周期
  5. DOM(二)——XML DOM
  6. 资深Android开发带你入门Framework,再不刷题就晚了!
  7. mysql是单核吗_一次单核CPU占用过高问题的处理
  8. Dubbo zookeeper 初探【转】
  9. 吕书健 我考H3CIE的经历
  10. 什么是BSIC及其在GSM系统中的应用
  11. 阅读多篇面经,总结了10个面试官常问的项目问题
  12. 【GD32F310开发板试用】利用I2C接口通过温湿度传感器HDC1080读取当前环境温湿度
  13. xps转jpeg图片
  14. 现在最火爆的盲盒交友小程序源码
  15. 测量误差(error)的概念
  16. java基础篇(11) 枚举类型
  17. 迅雷下载器-FDM,看2019新年大电影
  18. 详解数据模型设计方法
  19. Android PC端启用IceBox、黑域
  20. 数据库中主键、主码、主属性、关键字、候选关键字、码的区别

热门文章

  1. python保存为excel文件_初级Python:在excel文件打开时保存它
  2. axure web组件_AXURE原型设计:移动端选择器的应用
  3. 用c语言编译二叉树,C语言 数据结构平衡二叉树实例详解
  4. java 注释 过时_Java 注解
  5. mysql varchar(20)_MySQL中采用类型varchar(20)和varchar(255)对性能上的影响
  6. 微信第三方扫描登录 java源代码_微信开放平台基于网站应用授权登录源码(java)...
  7. mysql 实例启动利用binlog恢复_mysql利用binlog进行数据恢复
  8. ajax会占用服务器端内存吗,javascript - 为什么不允许在jquery datatable服务器端处理ajax成功使用? - 堆栈内存溢出...
  9. Java中stringbutter_java中string与ButterString的区别
  10. java环境变量一闪而过_Java环境变量配置和Tomcat启动时cmd界面一闪而过问题