使用原始double值初始化Double对象

时间:2010-07-20 13:57:15

标签: java autoboxing

在不使用对构造函数的调用而是使用原语的情况下初始化java.lang.Double对象时会发生什么?它似乎工作,但我不太清楚为什么。编译器是否存在某种隐式转换?这是使用Java 5.

public class Foo {

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

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

    }

}

3 个答案:

答案 0 :(得分:10)

这称为Autoboxing,它是Java 5中添加的一项功能。它将自动在基本类型和包装类型之间进行转换,例如double(基元)和java.lang.Double (对象包装器)。 java编译器自动转换行:

Double d = 5.1;

成:

Double d = Double.valueOf(5.1);

答案 1 :(得分:5)

它被称为AutoBoxing

  

自动装箱和自动拆箱   原始类型之间的转换   原始类型,如int,boolean,   和它们等效的基于对象的   像Integer和Boolean这样的对应物,   可以要求不必要的金额   额外的编码,特别是如果   只有方法才需要转换   调用Collections API,for   示例

     

自动装箱和自动拆箱   Java原语生成的代码是   更简洁,更容易理解。在   下一个例子是一个int   存储然后从中检索   数组列表。 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);

答案 2 :(得分:3)

它被称为autoboxing