java中的双重vs双重
可能重复:
Java:比较不同的double和Double
在我的一个实验室的示例java程序中,我有两种不同的方法分别采用Double和double参数。
在将参数传递给它们时,如何区分它们?
首先,您需要了解两种类型之间的区别。 double
是基本类型,而Double
是Object。
下面的代码显示了一个重载方法,我假设它类似于您的实验室代码。
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
不能时, double
参数可以为null
。
// 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自动装箱到Double
)。
– double
是一个基本类型,其中Double
是一个包装器对象 。
– Wrapper对象最常见的用途之一是Collection
。
例如:
List d = new ArrayList ();
–在Java 5中引入了一种称为Autoboxing
的机制来直接在两者之间进行转换。
例如:
double d = 10.41; Double wrapper = d;
你有一个方法重载的例子。 好的部分是编译器和JVM将根据调用方法时使用的参数类型自动选择正确的方法。
Double
是引用类型, double
是值类型。
Double
类在对象中包装基本类型double的值。 Double类型的对象包含一个类型为double的字段。“ link
正如@Fess所提到的那样,因为Double
是引用类型,所以它可以为null
。
如果你想要你可以使用.doubleValue()
方法明确地将Double
转换为double
,并使用new Double(1.0)
将其转换为.doubleValue()
。
同样@millimoose说:
您应该使用
X.valueOf()
而不是new X()
。 允许valueOf
方法缓存装箱类型以减少内存使用。 (不确定这是为Double
做的,但这是一个很好的习惯。)“
Double是一个包装类,而double是一个原始类型,如c / c ++。 如上所述,Double主要用于generics,但在需要数值和适当的对象封装的任何地方也是有用的。 在大多数情况下,Double和double可以互换使用。
- 在尝试连接到applet进行调试时,’shmemBase_attach失败:系统无法找到指定的文件’
- 计算字符长度的有效方法,具体取决于编码方式
- 用Java维护对象方法契约的自动unit testing?
- 与linewrap = true一起使用时,MigLayout JTextArea不会缩小
- 将binarySearch与Comparator和regex一起使用
- Zk从选定选项卡中删除事件侦听器
- 如何使用Hibernate(EntityManager)或JPA 2调用Oracle函数或过程
- Jackson + Tomcat – java.lang.VerifyError:无法从最终类inheritance
- 为新项目选择“更好”或更熟悉的技术?