自动装箱(不可变)- 1

“嗨,阿米戈!”

“今天我要说的是自动装箱自动装箱就是自动把东西放进盒子里。”

“你会记得 Java 有继承 Object 类的类型,以及原始类型。但事实证明,像集合和泛型这样方便的东西只适用于继承 Object 的类型。”

“然后决定制作每个原始类型的非原始对应物。”

原始类型 非原始对应物
字节 字节
短的 短的
整数 整数
长的 长的
漂浮 漂浮
双倍的 双倍的
布尔值 布尔值
字符 特点
空白 空白

“但是一直在这些类型之间转换非常不方便:”

int x = 3;
Integer y = new Integer(x + 1);
int z = y.intValue();

“尤其是在直接使用集合时:”

例子
int[] numbers = new int[10];
ArrayList list = new ArrayList();
for (int i = 0; i < numbers.length; i++)
{
 list.add( new Integer(i));
}

“这就是为什么 Java 的创造者发明了原始类型的 «自动装箱» 以及对非原始类型的‘拆箱’。”

“这是它的工作原理:

你看到什么了 真正发生了什么
int x = 3;
Integer y = x + 1;
int x = 3;
Integer y = Integer.valueOf(x + 1);
int z = y;
int z = y.intValue();
Boolean b = Boolean.FALSE;
boolean a = b;
Boolean b = Boolean.FALSE;
boolean a = b.booleanValue();
Integer x = null;
int y = x;
Integer x = null; int y = x.intValue(); //Throws an exception

“这一切都很简单。您可以将 int 和 Integer 类型分配给彼此,编译器会处理其他所有事情。”

“那很方便。”

“是的。但有些细微差别我稍后会谈到。”