8

当 java.lang.Double 对象在不使用构造函数调用而是使用原语进行初始化时会发生什么?它似乎有效,但我不太确定为什么。编译器是否正在进行某种隐式转换?这是使用 Java 5。

public class Foo {

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

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

    }

}
4

3 回答 3

10

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

Double d = 5.1;

进入:

Double d = Double.valueOf(5.1);
于 2010-07-20T13:58:38.350 回答
5

它被称为自动装箱

基本类型的自动装箱和自动拆箱 在基本类型(如 int、boolean 及其等效的基于对象的对应物(如 Integer 和 Boolean)之间进行转换)可能需要不必要的额外编码,尤其是当转换仅用于方法调用时例如,集合 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();

ArrayList<Integer> list = new ArrayList<Integer>();
  list.add(0, 42);
  int total = list.get(0);
于 2010-07-20T13:59:12.287 回答
3

它被称为自动装箱

于 2010-07-20T13:59:18.277 回答