包裝類(Wrapper)

我要成為羅賓姐姐發表於2021-01-02

基本概念

  • 通常情況下基本資料型別的變數不是物件,為了滿足萬物皆物件的理念就需要對基本資料型別的變數進行打包封裝處理變成物件,而負責將這些變數宣告為成員變數進行物件化處理的相關類,叫做包裝類

  • 包裝類對應的基本資料型別
    java.lang.Bytebyte
    java.lang.Shortshort
    java.lang.Integerint
    java.lang.Longlong
    java.lang.Floatfloat
    java.lang.Doubledouble
    java.lang.Booleanboolean
    java.lang.Characterchar

Integer類

基本概念

  • java.lang.Integer類內部包裝了一個int型別的變數作為成員變數,主要用於實現對int型別的包裝並 提供int型別到String類之間的轉換等方法。

常用常量

基礎知識:

  • int型別的數值有正負,一個int型的數字有32位,其中一位存正負號,數值部分有31位
public class IntegerTest {

    public static void main(String[] args) {
        
        // 列印Integer類中常用的常量數值
        System.out.println("最大值是:" + Integer.MAX_VALUE); // 2^31-1(減去0)
        System.out.println("最小值是:" + Integer.MIN_VALUE); // -2^31
        System.out.println("所表示二進位制的位數是:" + Integer.SIZE); // 32
        System.out.println("所佔位元組的個數是:" + Integer.BYTES); // 4
        System.out.println("對應int型別的Class例項是:" + Integer.TYPE); // int
    }
}

常用方法

public class IntegerTest {

    public static void main(String[] args) {

        int ic = Integer.parseInt("200");
        //int ic = Integer.parseInt("200a"); 
        // 編譯ok,執行發生NumberFormatException數字格式異常,因為有字母
        System.out.println("字串轉換為整數的結果是:" + ic); // 200
        
        System.out.println("根據引數指定的整數獲取對應的十進位制字串是:" + Integer.toString(200)); // 200
        System.out.println("根據引數指定的整數獲取對應的二進位制字串是:" + Integer.toBinaryString(200)); // 11001000
        System.out.println("根據引數指定的整數獲取對應的十六進位制字串是:" + Integer.toHexString(200)); // c8
        System.out.println("根據引數指定的整數獲取對應的八進位制字串是:" + Integer.toOctalString(200)); // 310
    }
}

裝箱和拆箱

  • 在Java5釋出之前使用包裝類物件進行運算時,需要較為繁瑣的“拆箱”和“裝箱”操作;即運算前先將包裝類物件拆分為基本型別資料,運算後再將結果封裝成包裝類物件。
  • 從Java5開始增加了自動拆箱和自動裝箱的功能。
public class IntegerTest {

    public static void main(String[] args) {

        // Java5釋出之前
        Integer it5 = Integer.valueOf(100);
        int ib = it5.intValue(); 
        
        // 從Java5開始增加了自動裝箱和自動拆箱的機制
        Integer it5 = 100;  // 直接通過賦值運算子實現自動裝箱
        int ib = it5;       // 直接通過賦值運算子實現自動拆箱
    }
}

筆試考點——自動裝箱池:

  • 在Integer類的內部提供了自動裝箱池技術,將-128到127之間的整數已經裝箱完畢,當程式中使用 該範圍之間的整數時,無需裝箱直接取用自動裝箱池中的物件即可,從而提高效率。
public class IntegerTest {

    public static void main(String[] args) {

        Integer it6 = 127; //128;
        Integer it7 = 127; //128;
        Integer it8 = Integer.valueOf(127); //new Integer(128);
        Integer it9 = Integer.valueOf(127); //new Integer(128);
        System.out.println(it6 == it7);      // 比較地址  false  true 127時地址一樣
        System.out.println(it6.equals(it7)); // 比較內容  true
        System.out.println(it8 == it9);      // 比較地址  false
        System.out.println(it8.equals(it9)); // 比較內容  true
    }
}

使用總結(Integer為例)

  • 基本資料型別轉換為對應包裝類的方式
    • 呼叫包裝類的構造方法 Integer(int value) / Integer(String s)(過時)
    • 呼叫包裝類的靜態方法 static Integer valueOf(int i)(推薦)
  • 獲取包裝類物件中基本資料型別變數數值的方式
    • 呼叫包裝類中的int intValue()方法即可
  • 字串轉換為基本資料型別的方式
    • 呼叫包裝類中的static int parseInt(String s)方法即可

相關文章