我很困惑为什么 Integer 和 int 可以在 Java 中互换使用,即使一个是原始类型而另一个是对象?
例如:
Integer b = 42;
int a = b;
或者
int d = 12;
Integer c = d;
我很困惑为什么 Integer 和 int 可以在 Java 中互换使用,即使一个是原始类型而另一个是对象?
例如:
Integer b = 42;
int a = b;
或者
int d = 12;
Integer c = d;
发表文章的前几句话描述得很好:
您不能将 int (或其他原始值)放入集合中。集合只能保存对象引用,因此您必须将原始值装入适当的包装类(在 int 的情况下为 Integer)。当你从集合中取出对象时,你会得到你放入的 Integer;如果需要 int,则必须使用 intValue 方法对 Integer 进行拆箱。所有这些装箱和拆箱都是一种痛苦,并且会使您的代码混乱。自动装箱和拆箱功能使过程自动化,消除了痛苦和混乱。
简而言之,基本上就是这样。它允许您利用原始集合框架,而无需自己完成工作。
主要缺点是它会让新程序员感到困惑,如果没有正确理解和使用,可能会导致代码混乱/混乱。
使用 anint
和 an Integer
“可互换”称为autoboxing。此功能是在 Java 5 中引入的。在此之前,您的示例代码不会编译。相反,您必须编写如下内容:
Integer b = Integer.valueOf(42); // or new Integer(42);
int a = b.intValue();
或者
int d = 12;
Integer c = Integer.valueOf(d); // or new Integer(d);
这相当冗长,这就是引入自动装箱的原因。让编码人员的生活更轻松是一种编译器魔法。
int
从技术上讲,Integer
它们本身是不可互换的,一个不能在需要另一个的地方使用。但是,自动装箱允许在两者之间进行隐式转换。
作为旁注,有一种情况是自动装箱(特别是拆箱)失败。如果您的代码尝试自动拆箱空值,您将NullPointerException
在运行时得到一个,例如:
Integer b = null;
int a = b; // NullPointerException here!
只是需要注意的事情...
它被称为自动装箱。这将准确地解释它是什么。
Java 语言规范规定,Java 虚拟机必须对整数和其他一些类型执行自动装箱/拆箱。