在不使用对构造函数的调用而是使用原语的情况下初始化java.lang.Double对象时会发生什么?它似乎工作,但我不太清楚为什么。编译器是否存在某种隐式转换?这是使用Java 5.
public class Foo {
public static void main(String[] args) {
Double d = 5.1;
System.out.println(d.toString());
}
}
答案 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。