1.包裝器類型列表

你知道 Java 有 8 種原始類型,它們是不是類的類型。一方面,這很好——它們很簡單,佔用的空間也很小。另一方面,有時類正是我們所需要的。您將在下一課中找到確切原因。

那麼可以做什麼呢?

從 Java 的第五個版本開始,每個原始類型都獲得了一個孿生類。每個這樣的類都存儲一個具有特定類型值的字段。這些類稱為包裝器類型,因為它們將原始值包裝在類中。

這是這些類型的列表。你知道任何?

原始類型 包裝類
byte
Byte
short
Short
int
Integer
long
Long
float
Float
double
Double
char
Character
boolean
Boolean

基本類型的名稱以小寫字母開頭,而包裝類的名稱以大寫字母開頭。一些類名也有點長:Integerinstead of intи Characterinstead of char

包裝類的所有對像都是不可更改的(不可變的)。

該類的簡化代碼Integer如下所示:

代碼 筆記
public class Integer
{
   private int value;

   Integer(int x)
   {
      this.value = x;
   }

   public int intValue()
   {
      return this.value;
   }

   public static Integer valueOf(int x)
   {
      return new Integer(x);
   }
}


變量

構造函數




方法返回值




靜態方法為變量創建一個新Integer對象int

2. 將 an 轉換int為 anInteger

包裝器類型被認為是它們的原始兄弟姐妹的對應物:您可以輕鬆地創建一個對應於原始類型的包裝器對象。

下面我們以int類型為例,分析原始類型是如何與對應的包裝類型進行交互的。int從 an到 an的轉換代碼Integer如下所示:

要將 an 轉換int為 an Integer,您需要編寫以下代碼:

Integer name = new Integer(value);

其中name是變量名Integervalue是包裝後的int值。

例子:

代碼 筆記
Integer age = new Integer(18);
Integer hundred = new Integer(100);
Integer zero = new Integer(0);

要將 an 轉換Integer為 an int,您需要編寫以下代碼:

int name = variable.intValue();

其中name是變量名intvariable是對對象的引用Integer

例子:

代碼 筆記
Integer age = new Integer(18);
int x = age.intValue();

x == 18
Integer hundred = new Integer(100);
int y = hundred.intValue();

y == 100
Integer zero = new Integer(0);
int z = zero.intValue();


z == 0
int i = 110;
Integer zero = new Integer(i);
int z = zero.intValue();

z == 110

3. 自動裝箱和拆箱

但即使是簡單的類型操作Integer也不容易編寫。

正如我們之前所說,Integer類型是不可改變的(不可變的)。要創建Integer具有新int值的對象,您需要顯式創建一個新Integer對象。int也就是說,獲取存儲在對象內部的值很容易Integer——只需調用該intValue()方法即可。

例子:

代碼 描述
Integer a = Integer.valueOf(5);
int b = a.intValue();
Integer c = new Integer(b + 5)
包裹5在一個Integer對像中從對像
中獲取值 創建一個新對象(等於10)Integer
Integer

這是相當麻煩的代碼,你不覺得嗎?

Java 的創造者是這麼認為的,所以他們教編譯器如何自動執行這些操作。intan到 an的自動轉換Integer稱為自動裝箱(自動將值放入盒子中),反向操作(將 an 轉換Integer為 an int)稱為拆箱

你的代碼 編譯器看到了什麼
Integer a = 10;
Integer a = Integer.valueOf(10);
int b = a;
int b = a.intValue();
Integer c = a + b;
Integer c = Integer.valueOf(a.intValue() + b);

由於自動裝箱和拆箱,您可以安全地將 an 分配intInteger變量,反之亦然。您可以編寫任何復雜的表達式,而無需區分類型intInteger類型。

例子:

代碼 編譯器將生成什麼
Integer a = 5;
int b = a;
Integer c = a + b;
int d = a + b + c;
Integer a = Integer.valueOf(5);
int b = a.intValue();
Integer c = Integer.valueOf(a.intValue() + b);
int d = a.intValue() + b + c.intValue();
Integer a = 5;
int b = 5;

if (a == b)
{
   ...
}
Integer a = Integer.valueOf (5);
int b = 5;

if (a.intValue() == b)
{
   ...
}


4.比較包裝器變量

自動裝箱和拆箱是簡單透明的過程。我們根據需要使用語句,根據需要new Integer()調用方法。intValue()

一切對你來說都很好,很容易,程序員。請記住,如果您比較 anInteger和 an Integer,則比較基於參考而非值。

代碼 控制台輸出
Integer a = 1000;
Integer b = 1000;

System.out.println(a == b);



false
Integer a = 1000;
Integer b = 1000;

System.out.println(a.equals(b));



true

a變量b不存儲int值。它們存儲對對象的引用。這意味著記住如何正確比較它們很重要:

錯誤的 正確的
Integer a = 1000;
Integer b = 1000;
if (a == b)
{
   ...
}
Integer a = 1000;
Integer b = 1000;
if (a.equals(b))
{
   ...
}