双VS在Java双[复制](Double vs double in java [duplicate]

2019-07-03 17:52发布

可能重复:
Java的:不同的双和Double比较

在我的实验室的一个样本Java程序,我有两个不同的方法分别占双,双参数。
如何在它们之间传递参数给他们时区分?

Answer 1:

首先,你需要了解两个类型之间的差异。 double是一个基本类型而Double是一个对象。

下面的代码显示了一个重载的方法,我以为是类似实验室的代码。

void doStuff(Double d){ System.out.println("Object call"); }
void doStuff(double d){ System.out.println("Primitive call"); }

有几种方法,你可以调用这些方法:

doStuff(100);
doStuff(200d);
doStuff(new Double(100));

这些调用将导致:

"Primitive call"
"Primitive call"
"Object call"


Answer 2:

Double参数可以为null时, double不能。



Answer 3:

- double为基本类型,在这里作为Double是一个包装对象

-最常见的使用包装对象的是Collection

例如:

List<Double> d = new ArrayList<Double>();

-Java 5中一个名为机制Autoboxing已被引入到了两个直接相互转换。

例如:

double d = 10.41;
Double wrapper = d;


Answer 4:

// Method A
public static void foo(Double d) {...}

// Method B 
public static void foo(double d) {...}

显然,如果你传递一个Double对象,然后方法A将被调用; 也就是说,如果你有这样的事情:

Double d = new Double(1.0);

此外,如果你通过一个双文字,你会调用方法B。 有趣的是,如果你有类似的东西

double d = new Double(1.0);

在这种情况下方法B也将被调用,因为类型 ddouble ; 在Double对象被拆箱到double 。 在同样的注意,如果你有:

Double d = 1.0;

然后, 方法A将被调用,因为类型dDouble (对double -literal被autoboxed到Double )。



Answer 5:

你有什么是一个例子方法重载 。 好的部分是编译器和JVM会的基础上,当你调用方法所使用的参数的类型自动选择正确的方法。



Answer 6:

Double是引用类型和double为值类型。

Double类包装基本类型中的对象double的值。 DOUBLE类型的对象包含一个字段类型为双。” 链接

作为@Fess所提及,因为Double是引用类型,也可以是null

如果你愿意,你可以显式地转换从Doubledouble.doubleValue()方法和viceverrsa用new Double(1.0)

另外,作为@millimoose说:

您应该使用X.valueOf()而不是new X()valueOf方法被允许缓存拳击类型,以减少内存使用。 (不知道这是完蛋了Double秒,但它是一个很好的习惯进入。)”



Answer 7:

双是一个包装类而双是原始类型等C / C ++。 正如上面所指出的,双大多是仿制药使用,但也是非常有用的任何地方,需要两个数值和适当的对象封装。 在大多数情况下,双击和双可以互换使用。



文章来源: Double vs double in java [duplicate]