java中的双重vs双重

时间:2012-11-11 14:26:45

标签: java methods double parameter-passing

  

可能重复:
  Java : different double and Double in comparison

在我的一个实验室的示例java程序中,我有两种不同的方法分别采用Double和double参数 在将参数传递给它们时,如何区分它们?

7 个答案:

答案 0 :(得分:27)

<Double参数可以是null,而double则不能。

答案 1 :(得分:22)

首先,您需要了解这两种类型之间的区别。 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"

答案 2 :(得分:3)

- double是基本类型,其中Double包装器对象

- Wrapper对象最常见的用途之一是使用Collection

<强>例如

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

- Java 5 中,一种名为Autoboxing的机制已被引入直接在两者之间进行转换。

<强>例如

double d = 10.41;
Double wrapper = d;

答案 3 :(得分:1)

// 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 ,因为d类型double; Double对象被取消装箱到double。同样,如果你有:

Double d = 1.0;

然后方法A 将被调用,因为d的类型将是Doubledouble - 文字被自动装箱到{{1} })。

答案 4 :(得分:0)

Double是引用类型,double是值类型。

  

Double类在对象中包装基本类型double的值。 Double类型的对象包含单个字段,其类型为double。“link

正如@Fess所提及的,因为Double是引用类型,它可以是null

如果您愿意,可以使用Double方法明确地从double转换为.doubleValue(),使用new Double(1.0)明确转换为X.valueOf()

同样@millimoose说:

  

您应该使用new X()代替valueOf。允许Double方法缓存装箱类型以减少内存使用。 (不确定这是为{{1}}做的,但这是一个很好的习惯。)“

答案 5 :(得分:0)

你所拥有的是method overloading的一个例子。好的部分是编译器和JVM将根据调用方法时使用的参数类型自动选择正确的方法。

答案 6 :(得分:0)

Double是一个包装类,而double是一个原始类型,如c / c ++。如上所述,Double主要用于泛型,但在需要数值和适当的对象封装的任何地方也是有用的。在大多数情况下,Double和double可以互换使用。