当我们在Java中将Integer分配给int时,为什么编译器不会出错

时间:2012-08-10 07:28:49

标签: java

为什么编译器在将Integer(object)赋值给int(primitive)时不会出错?

int i;
Integer ii = new Integer(5);
i = ii;//no compilation error.

所有其他类型(byte-Byte,float-Float)就是这种情况。

是什么原因?我在这里错过了什么吗?

5 个答案:

答案 0 :(得分:13)

它被称为自动装箱/拆箱。

从Java 1.5开始,编译器会自动将基元“包装”到相应的类中(例如intIntegerdoubleDouble等),并且盒子根据需要。

有关详细信息,请参阅文档中的this page

答案 1 :(得分:3)

Java SE 5.0引入了自动装箱作为新功能。您可以在Java文档中找到更多信息。 http://docs.oracle.com/javase/1.5.0/docs/guide/language/autoboxing.html

答案 2 :(得分:3)

Java 5及更高版本能够执行autoboxing。编译器将隐式地将您的代码转换为:

int i;
Integer ii = new Integer(5);
i = ii.intValue();

答案 3 :(得分:2)

i = ii;//no compilation error.

因为这称为自动装箱。分配object to primitive variable时,将取出对象中的值并将其分配给基元。此过程称为autounboxing。 反之亦然Autoboxing

答案 4 :(得分:2)

这称为“自动装箱/拆箱”。像int这样的原始类型会在需要时自动转换为类Integer,反之亦然。