2010-07-20 38 views
6

当不使用对构造函数的调用而初始化java.lang.Double对象而是使用基元时发生了什么?它似乎工作,但我不知道为什么。编译器是否存在某种隐式转换?这是使用的Java 5.使用原始双精度值初始化Double对象

public class Foo { 

    public static void main(String[] args) { 
     Double d = 5.1; 

     System.out.println(d.toString()); 

    } 

} 
+1

现在知道它被称为自动装箱,你可以在这里找到很多[有趣的文章](http://stackoverflow.com/search?q= [java] +自动装箱):) – 2010-07-20 14:03:34

+0

Autboxing,这就是我正在寻找对于。谢谢! – 2010-07-20 14:54:51

回答

9

这被称为Autoboxing其是在Java 5中加入它将原始类型和包装类型之间自动转换的特征如double(原始)和java.lang.Double(该对象包装)。 Java编译器自动将线:

Double d = 5.1; 

成:

Double d = Double.valueOf(5.1); 
5

它被称为AutoBoxing

自动装箱和 基本类型 原始类型之间的转换,例如自动开箱int,boolean, 及其等价物基于对象的 类似Integer a nd布尔型, 可能需要额外的编码,特别是如果 转换仅用于方法 调用Collections API, 示例。

自动装盒和自动拆箱 Java原语生成的代码更简洁,更易于操作。在 下一个示例int是 存储,然后从 ArrayList检索。 5.0版本将 转换为整数并转换回编译器所需的 。

以前

ArrayList<Integer> list = new ArrayList<Integer>(); 
    list.add(0, new Integer(42)); 
    int total = (list.get(0)).intValue(); 

ArrayList<Integer> list = new ArrayList<Integer>(); 
    list.add(0, 42); 
    int total = list.get(0);