Double class vs double原始数据类型

时间:2014-10-10 12:37:29

标签: java double

我从查看其他参考资料中了解到因此Double有很多缺点。

与双原始数据类型相比的双重缺点:

  1. 速度较慢(参考:Java Double vs double: class type vs primitive type
  2. 由于涉及元数据,因此需要更多存储空间。
  3. 现在,我知道有一些操纵我们可以用Double做什么。 JavaDoc但这些方法中大多数(85%)是静态的,因此它不是一个巨大的优势。另一件事我知道double不能为null。

    Double doubleClass = null; // Is valid
    double doubleType  = null; // Results in NPE
    

    在所有这些缺点之后,我无法理解为什么我们会在现实生活场景中使用Double而不是double。有些人可以给出一个真实世界的例子和解释。

    由于

3 个答案:

答案 0 :(得分:4)

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

  1. 有些库根本不适用于基元。 (Collections API是您很快就会遇到的问题,但使用generics的任何事情都会类似。)
  2. 确切地说Double是引用类型,因此可以是null。有时这些信息很重要。 (想象一下,当用户可以填写表单中的各个字段时,有些是可选的,并且您想要确定是否填写了字段。null值是一个相当好的指标,表示字段已离开空。)
  3. 但总的来说,你是对的,只要有可能,你应该使用原始类型。

答案 1 :(得分:3)

Double原语 double的包装类。 Java Collection框架包含List,Set等容器。这些容器的问题是它们不能接受原语。因此,double被隐式转换为Double并插入到集合中(Autoboxing)。

Double doubleClass = null; // Is valid --> Double is not a primitive. So, you can get NPE if you do doubleClass.someInstanceLevelFieldOrMethod.

double doubleType  = 5.5; //is a primitive

另外,Double会慢于double,因为与基元不同,Classes有一些簿记/开销。

PS:Double提供了许多APi /方法来做事。示例 - Double.parseDouble(TypeX value)从TypeX

的值创建一个新的double

答案 2 :(得分:3)

您应该使用Double

的主要原因有很多
  1. 需要使用类而不是基本类型的Collections API

  2. 有些情况下,如果来自不同的数据源,double会有不同的精度。您可以使用类.equals注意大多数情况

    double d1,d2; // Initalized to some value 
    d1==d2; // will return true but some(very few will return false)
    

    您可以在.equals method

  3. 上阅读此内容
  4. 正如您所提到的,Double可以为null,而double则不能。考虑一个场景,其中某个对象的值可能存在或者可能存在但是如果它没有那么我们希望它在数据库中为空时检索它会抛出一个带有double的NPE但是不会带有Double。

    < / LI>

    您应该尽可能使用原始类型而不是Double。