可能重复:
Java的:不同的双和Double比较
在我的实验室的一个样本Java程序,我有两个不同的方法分别占双,双参数。
如何在它们之间传递参数给他们时区分?
可能重复:
Java的:不同的双和Double比较
在我的实验室的一个样本Java程序,我有两个不同的方法分别占双,双参数。
如何在它们之间传递参数给他们时区分?
首先,你需要了解两个类型之间的差异。 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"
Double
参数可以为null
时, double
不能。
- double
为基本类型,在这里作为Double
是一个包装对象 。
-最常见的使用包装对象的是Collection
。
例如:
List<Double> d = new ArrayList<Double>();
-在Java 5中一个名为机制Autoboxing
已被引入到了两个直接相互转换。
例如:
double d = 10.41;
Double wrapper = d;
// 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
-literal被autoboxed到Double
)。
你有什么是一个例子方法重载 。 好的部分是编译器和JVM会的基础上,当你调用方法所使用的参数的类型自动选择正确的方法。
Double
是引用类型和double
为值类型。
的
Double
类包装基本类型中的对象double的值。 DOUBLE类型的对象包含一个字段类型为双。” 链接
作为@Fess所提及,因为Double
是引用类型,也可以是null
。
如果你愿意,你可以显式地转换从Double
到double
与.doubleValue()
方法和viceverrsa用new Double(1.0)
另外,作为@millimoose说:
您应该使用
X.valueOf()
而不是new X()
的valueOf
方法被允许缓存拳击类型,以减少内存使用。 (不知道这是完蛋了Double
秒,但它是一个很好的习惯进入。)”
双是一个包装类而双是原始类型等C / C ++。 正如上面所指出的,双大多是仿制药使用,但也是非常有用的任何地方,需要两个数值和适当的对象封装。 在大多数情况下,双击和双可以互换使用。