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

Dou*_*ter 8 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());

    }

}
Run Code Online (Sandbox Code Playgroud)

kro*_*ock 10

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

Double d = 5.1;
Run Code Online (Sandbox Code Playgroud)

成:

Double d = Double.valueOf(5.1);
Run Code Online (Sandbox Code Playgroud)


wil*_*ood 5

它被称为AutoBoxing

原始类型的自动装箱和自动拆箱在原始类型之间进行转换,如int,boolean及其等效的基于对象的对应方(如Integer和Boolean),可能需要不必要的额外编码量,特别是如果只需要对方法调用进行转换例如,Collections API.

Java原语的自动装箱和自动拆箱产生的代码更简洁,更易于遵循.在下一个示例中,正在存储一个int,然后从ArrayList中检索它.5.0版本保留了转换为Integer并返回编译器所需的转换.

之前

ArrayList<Integer> list = new ArrayList<Integer>();
  list.add(0, new Integer(42)); 
  int total = (list.get(0)).intValue();
Run Code Online (Sandbox Code Playgroud)

ArrayList<Integer> list = new ArrayList<Integer>();
  list.add(0, 42);
  int total = list.get(0);
Run Code Online (Sandbox Code Playgroud)