为什么编译器在将Integer(object)分配给int(原始)时不会给出错误?为什么编译器在我们将Integer分配给int时不会给出错误
int i;
Integer ii = new Integer(5);
i = ii;//no compilation error.
这是与所有其他类型(字节字节,浮法浮动)的情况下..
的原因是什么?我在这里错过了什么吗?
为什么编译器在将Integer(object)分配给int(原始)时不会给出错误?为什么编译器在我们将Integer分配给int时不会给出错误
int i;
Integer ii = new Integer(5);
i = ii;//no compilation error.
这是与所有其他类型(字节字节,浮法浮动)的情况下..
的原因是什么?我在这里错过了什么吗?
这就是所谓的自动装箱/拆箱。
从Java 1.5的,根据需要自动地编译“盒子”原语成其相应的种类(例如int
和Integer
,double
和Double
等),和未框。
请参阅this page以获取更多详细信息。
i = ii;//no compilation error.
因为这就是所谓的autounboxing。当您分配object to primitive variable
时,来自对象的值被取出并分配给基元。这个过程被称为autounboxing
。 反之亦然Autoboxing
。
这被称为“自动装箱/拆箱”。像int
这样的原始类型会在需要时自动转换为Integer
等类,反之亦然。
Java SE 5.0引入了自动装箱功能作为新功能。您可以在Java文档中找到更多信息。 http://docs.oracle.com/javase/1.5.0/docs/guide/language/autoboxing.html
Java 5和更新版本能够执行autoboxing。编译器会隐式地将您的代码转换为:
int i;
Integer ii = new Integer(5);
i = ii.intValue();