Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 双类与双基元数据类型_Java_Double - Fatal编程技术网

Java 双类与双基元数据类型

Java 双类与双基元数据类型,java,double,Java,Double,我从其他参考文献中了解到,Double有很多缺点 与双基元数据类型相比有两个缺点: 速度较慢(参考:) 由于涉及元数据,它需要更多的存储空间 现在,我知道我们可以用Double做一些操作。但这些方法中的大多数(85%)是静态的,因此没有很大的优势。我还知道double不能为null Double doubleClass = null; // Is valid double doubleType = null; // Results in NPE 在所有这些缺点之后,我无法理解为什么我们会在现

我从其他参考文献中了解到,
Double
有很多缺点

与双基元数据类型相比有两个缺点:

  • 速度较慢(参考:)
  • 由于涉及元数据,它需要更多的存储空间
  • 现在,我知道我们可以用Double做一些操作。但这些方法中的大多数(85%)是静态的,因此没有很大的优势。我还知道double不能为null

    Double doubleClass = null; // Is valid
    double doubleType  = null; // Results in NPE
    
    在所有这些缺点之后,我无法理解为什么我们会在现实生活中使用Double而不是Double。一些人能给出一个真实世界的例子并加以解释吗


    谢谢

    据我所知,有两个主要原因

  • 有些库根本不能使用原语。(这是你最有可能很快遇到的一个,但使用的任何东西都将是类似的)
  • 实际上,
    Double
    是一个引用类型,因此可以是
    null
    。有时这些信息很重要。(想象一个场景,当用户可以在表单中填写各种字段时,有些字段是可选的,并且您希望了解字段是否已填写。
    null
    值是一个相当好的指示器,表明表单字段为空。)

  • 但一般来说,您是对的,只要有可能,就应该使用原语类型。

    Double
    是原语Double之上的包装类。Java集合框架有列表、集合等容器。这些容器的问题是它们不能接受原语。因此,double被隐式转换为double并插入到集合中(自动装箱)

    此外,Double将比Double慢,因为与原语不同,类有一些簿记/开销


    PS:Double提供了许多APi/方法来做事情。示例-
    Double.parseDouble(TypeX值)
    从TypeX的值创建一个新的Double

  • 需要使用类而不是基元类型的

  • 在某些情况下,您知道,如果数据来自不同的数据源,double可能具有不同的精度。您可以使用该类。请注意大多数情况

    double d1,d2; // Initalized to some value 
    d1==d2; // will return true but some(very few will return false)
    
    你可以在网上看到这件事

  • 正如您提到的,Double可以为null,Double不能为null。设想一个场景,其中某个对象的值可能存在,或者可能存在,如果不存在,那么我们希望它在数据库中为null。检索它时,将抛出一个带有double的NPE,但使用double则不会


  • 您应该尽可能使用基元类型,而不是双重类型。

    您使用过集合吗?,
    Double doubleType=null;//NPE中的结果
    未编译。还未编译。我正处于学习阶段。@newbie2314《后记》的评论实际上是对你问题的一个很好的回答。-请参阅
    Numbers
    自动装箱和取消装箱
    。如果听起来很愚蠢,那很抱歉,但它的主要用途是收集,而不是其他任何地方?@newbie2314-这就是原因之一。除此之外,它还提供了一些方法。@TheLostMind Double.parseDouble这不是又一个静态调用吗?@ErrorAnswer-是的。因此,如果实例为
    null
    ,它就可以工作。这就是我提到的原因-如果你做doubleClass,你可以得到NPE。SomeInstanceLevel FieldorMethod。谢谢你,这让它更清楚了。感谢我所寻找的例子。
    double d1,d2; // Initalized to some value 
    d1==d2; // will return true but some(very few will return false)