自動裝箱(不可變)- 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 類型分配給彼此,編譯器會處理其他所有事情。”

“那很方便。”

“是的。但有些細微差別我稍後會談到。”