CodeGym /Java Blog /Toto sisi /Java 中的包裝類
John Squirrels
等級 41
San Francisco

Java 中的包裝類

在 Toto sisi 群組發布
你好!您已經非常熟悉原始類型,並且已經對它們進行了大量的工作。在編程(尤其是 Java)中,基元有很多優點:它們使用很少的內存(因此使程序更高效)並且具有明確界定的值範圍。然而,在學習 Java 的過程中,我們已經經常重複“Java 中的一切都是對象”這句口頭禪。但是原始人直接與這些話相矛盾。它們不是對象。那麼,我們的“一切皆對象”原則是不是錯誤的呢?其實不然。在 Java 中,每個基本類型都有一個孿生兄弟,一個包裝類。

什麼是包裝類?

包裝器是一個在內部存儲原語的特殊類。但是因為它是一個類,所以您可以創建它的實例。它們在內部存儲原始值,但仍然是真實的對象。包裝器類名稱與其對應原語的名稱非常相似(或完全相同)。因此,它們很容易記住。
原始數據類型的包裝類
原始數據類型 包裝類
整數 整數
短的 短的
長的 長的
字節 字節
漂浮 漂浮
雙倍的 雙倍的
字符 特點
布爾值 布爾值
包裝器對象的創建方式與任何其他對象相同:

public static void main(String[] args) {

   Integer i = new Integer(682);
  
   Double d = new Double(2.33);
  
   Boolean b = new Boolean(false);
}
包裝類讓我們減輕了原始類型的缺點。最明顯的是原語沒有方法。例如,它們沒有toString()方法,因此您不能將int轉換為String。但是Integer包裝器類使這很容易。

public static void main(String[] args) {

   Integer i = new Integer(432);
  
   String s = i.toString();
}
但是,向另一個方向轉換可能會比較棘手。假設我們有一個String,我們肯定知道它包含一個數字。無論如何,沒有本地方法可以使用原始int從String中提取數字並將其轉換為數字。但是,我們可以使用包裝類。

public static void main(String[] args) {

   String s = "1166628";

   Integer i = Integer.parseInt(s);

   System.out.println(i);
}
輸出:
1166628
我們成功地從String中提取了一個數字並將其分配給Integer引用變量i。順便說一下,關於參考。您已經知道參數以不同的方式傳遞給方法:按值傳遞原語和按引用傳遞對象。您可以在創建自己的方法時使用這些知識:例如,如果您的方法使用小數但您需要通過引用傳遞邏輯,則可以將Double / Float參數傳遞給該方法,而不是double / float。除了包裝類的方法,它們的靜態字段也可以很方便。例如,假設您有以下任務:顯示最大可能int值,後跟最小可能值。這個問題看起來很基本。但如果沒有谷歌,你不太可能做到這一點。但是包裝器可以讓你輕鬆處理這樣的“平凡任務”:

public class Main {
   public static void main(String[] args) {

       System.out.println(Integer.MAX_VALUE);
       System.out.println(Integer.MIN_VALUE);
   }
}
這些領域使您不會因為完成更嚴肅的任務而分心。更不用說輸入2147483647 (恰好是 MAX_VALUE 的值)這一事實絕非易事!:) 此外,在上一課中,我們指出包裝器對像是不可變的。

public static void main(String[] args) {

   Integer a = new Integer(0);
   Integer b = new Integer(0);

   b = a;
   a = 1;
   System.out.println(b);
}
輸出:
0
a 最初指向的對象的​​狀態沒有改變(因為b的值也會改變)。與String一樣,不是更改包裝器對象的狀態,而是在內存中創建一個全新的對象。 那麼,為什麼 Java 的創建者最終決定在語言中保留原始類型呢?既然一切都應該是一個對象,並且我們有包裝器類可以表達原語所表達的一切,為什麼不只保留語言中的包裝器並刪除原語呢?答案很簡單:性能。原始類型之所以稱為原始類型,是因為它們缺少對象的許多“重量級”特徵。是的,對像有很多方便的方法,但你並不總是需要它們。有時,您只需要數字 33 或 2.62 或true / false。在對象的優勢無關緊要並且不需要程序運行的情況下,原語更適合該任務。
留言
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION