在我的一个实验室的示例java程序中,我有两种不同的方法分别采用Double和double参数 在将参数传递给它们时,如何区分它们?
答案 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
的类型将是Double
(double
- 文字被自动装箱到{{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可以互换使用。