Java---詳細解析包裝類 讓你徹底明白 Integer 類和 int 基本數據類型的區別

Integer類

   對應的是基本數據類型 int 類型的包裝類

   任意的一個基本數據類型都有一個class屬性

   class使用來描述顯示事物的, int這個基本數據類型也是一個事物

Number類中的常用方法

   byte byteValue()
     以 byte 形式返回指定的數值。

   abstract double doubleValue()
      以 double 形式返回指定的數值

   abstract float floatValue()
      以 float 形式返回指定的數值。

   abstract int intValue()
      以 int 形式返回指定的數值。

  abstract long longValue()
      以 long 形式返回指定的數值。

   short shortValue()
      以 short 形式返回指定的數值。

   BigDecimal, BigInteger, Byte, Double, Float, Integer, Long, Short這些類作爲Number類的子類

   爲什麼包裝類要這樣來設計?

   基本數據類型爲什麼要變成包裝類? --> 包裝類更方便去操作基本數據類型

   基本數據類型的功能
      1.實現運算 【後面將自動拆裝箱】

      2.類型轉換 【包裝類同時一樣可以進行類型轉換,利用的就是Number類】

包裝類完全可以概括基本數據類型

包裝類常用方法示例

public class IntegerDemo01 {
	public static void main(String[] args) {
		// 手動裝箱: 將基本數據類型轉換成對應包裝類類型
		Integer integer = new Integer(100);
		Integer integer2 = new Integer("100");
		
		System.out.println(integer);
		System.out.println(integer2);
		
		System.out.println(Integer.BYTES); // 返回int的字節數
		System.out.println(Integer.SIZE); // 返回對應的位數
		System.out.println(Integer.MAX_VALUE); // int範圍的最大值
		System.out.println(Integer.MIN_VALUE); // int範圍的最小值
		
		Class c = Integer.TYPE; // 表示基本類型 int 的 Class 實例。
		Class c2 = integer.getClass(); // 表示的是引用數據類型 Integere的 Class實例 
		Class c3 = int.class; // 表示基本類型 int 的 Class 實例。
		System.out.println(c == c2); // false
		System.out.println(c == c3); // true
		System.out.println(c);
		System.out.println(c2);
		System.out.println(c3);
		
		integer.intValue()
		
		
	}
}

成員方法

   public int intValue() 拆箱,將Integer轉化爲整型

   public static int parseInt(String s) 將字符串轉換爲int類型

   public static String toString(int i) 將整型轉換爲字符串

   public static Integer valueOf(int i) 將整型裝換爲Integer類型

   public static Integer valueOf(String s) 將字符串轉換爲Integer類型

   根據valueOf相關方法找一個規律

      String.valueOf 將任意類型轉換成字符串類型
      Integer.valueOf 將int類型或者String類型轉換成Integer類型
      Double.valueOf 將double類型或者String類型轉換成Double類型
      XXX.valueOf 將任意類型類型轉換成xxx類型

   爲什麼有了new的方式創建Integer還需要來一個valueOf方法?

   分析源碼:

     我們Integer設置了緩存機制,提高了效率

     緩存類IntegerCache裏面先定義好了一個Integer[]數組,這個數組會在加載IngerCache類的時候就初始化這個數組

     如果需要創建的數在 -128到127之間的話,就只皆從緩存中取,否則分配內存創建

     開發中Integer.valueOf來創建包裝類,但是其實開發中也不用,待會要用自動裝箱

包裝類手動裝拆箱代碼示例

public class IntegerDemo02 {
	public static void main(String[] args) {
		// 手動裝箱
		Integer ii = new Integer(100);
		// 手動拆箱
		int i = ii.intValue();
		System.out.println(i);
		
		// 將字符串轉換成基本數據類型int類型
		int i2 = Integer.parseInt("100");
		System.out.println(i2);
		
		String s = Integer.toString(100);
		System.out.println(s);
		
		// 手動裝箱 2
		Integer ii2 = Integer.valueOf(i2);
		System.out.println(ii2);
		
		Integer ii3 = Integer.valueOf("100");
		System.out.println(ii3);
		
	}
}

  自動裝箱: 編譯器會自動將基本數據類型轉換成包裝類類型 底層依賴Integer.valuOf()方法

   自動拆箱: 編譯器會將包裝類類型轉換成對應的基本數據類型

   基於自動拆裝箱的新特性,我們可以完全把包裝類類型當做基本數據類型來使用

自動裝拆箱代碼示例

	public static void main(String[] args) {
		// 多態
		Object obj = 12;
		// String s = 12;
		Integer i = 12; // 編譯器處理方式: Integer i = Integer.valuOf(12);
		
		i = i - 2; // 編譯器處理方式:   Intger.valueOf(i.intValue() - 2)
		System.out.println(i);
		
		if (i >= 5) { // 編譯器處理方式: i.intValue - 5
			System.out.println("haha");
		}
		
		// byte by = (byte)i;
		Integer ii = 128;
		byte by = ii.byteValue();
		System.out.println(by);
		
		double dd = ii.doubleValue();
		System.out.println(dd);
	}
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章