包裝類詳解

包裝類

包裝類的簡介

Java是一種面向對象的語言,但是不是面向對象,Java中的數據類型分爲基本數據類型引用數據類型,其中基本數據類型就不是對象,它不具有屬性和方法;Java在設計類時爲每個基本數據類型設計了一個對應的類進行代表,這些和基本數據類型相對應的類統稱爲包裝類

基本數據類型 包裝類
int Integer
char Character
long Long
double Double
float Float
short Short
boolean Boolean
byte Byte

.
所有的包裝類都是由final修飾的,除了Character和Boolean以外,其他的都是“數字型”,“數字型”都是java.lang.Number的子類。Number類是抽象類,因此它的抽象方法,所有子類都需要提供實現。
Number類提供了抽象方法:intValue()、longValue()、floatValue()、doubleValue(),意味着所有的“數字型”包裝類都可以互相轉型。
在這裏插入圖片描述

包裝類的使用

包裝類的用途

作用:

  1. 作爲和基本數據類型對應的類型存在,方便涉及到對象的操作
  2. 提供每種基本數據類型的相關屬性如最大值、最小值等以及相關的操作方法,這些操作方法的作用是在基本數據類型、包裝對象、字符串之間提供相互之間的轉化
	public static void main(String[] args) {
		Integer  aInteger = new Integer(6); 
		Integer bInteger = Integer.valueOf(66); //將基本數據類型轉化成包裝類對象
		
		double d = bInteger.doubleValue();
		int c = bInteger.intValue();			//將包裝類對象轉成基本數據類型
		
		Integer eInteger = new Integer("66");
		Integer fInteger = Integer.parseInt("66");//將字符串轉化包裝類對象
		
		String string = fInteger.toString();
		String string1 = ""+fInteger;			  //將包裝類對象轉化成字符串
		
		System.out.println("int類型最小的整數" + Integer.MIN_VALUE);
		System.out.println("int類型最大的整數" + Integer.MAX_VALUE);//包裝類中常見的常量
	}

int類型的最大整數和最小整數
在這裏插入圖片描述

裝箱與拆箱

裝箱和拆箱就是將基本數據類型和包裝類之間進行的互相轉換
裝箱與拆箱分爲手動和自動兩種方式( JDK1.5後,Java引入了自動裝箱與拆箱)
裝箱(autoboxing):
將基本數據類型轉化爲對象;

  1. 手動裝箱: Integer aInteger = new Integer(6);
  2. 自動裝箱: Integer aInteger = 6;
    (JDK1.5後JVM自動爲我們執行了Integer aInteger = Integer.valueOf(6)操作)

拆箱(unboxing):
當需要一個基本數據類型時,對象轉化爲基本數據類型;

  1. 手動裝箱: Integer aInteger = Integer.intValue();
  2. 自動裝箱: Integer aInteger = 6; int b = aInteger;
    (自動裝箱不需要顯式調用 基本數據類型Value()轉型方法)

包裝類空指針異常問題
當包裝類對象爲空時,自動拆箱時報錯
在這裏插入圖片描述
解決方法:

	public static void main(String[] args) {
		Integer a = null;
		if (a != null) { 			//加判斷後在進行自動拆箱
			int b = a;
		}
	}

包裝類的緩存問題

緩存處理的原理爲:如果數據在 -128~127 這個區間,那麼在類加載時就已經爲該區間的每個數值創建了對象,並將這256個對象存放到一個名爲cache的數組中。每當自動裝箱過程發生時(或者手動調用valueOf()時),就會先判斷數據是否在該區間,如果在則直接獲取數組中對應的包裝類對象的引用,如果不在該區間,則會通過new調用包裝類的構造方法來創建對象。

public static void main(String[] args) {
		Integer aInteger = -111;
		Integer bInteger = Integer.valueOf(-111);
		System.out.println(aInteger == bInteger);//當數組在緩衝範圍內,則會從緩衝區去獲取對應的Integer對象
		System.out.println(aInteger.equals(bInteger));
		Integer cInteger = 1111;
		Integer dInteger = Integer.valueOf(1111);
		System.out.println(cInteger == dInteger); //因爲不在緩存範圍內,通過new調用了包裝類中的構造方法創建了對象開闢了兩塊不同的區域,所以爲false
		System.out.println(cInteger.equals(dInteger));
	}

在這裏插入圖片描述
包裝類的緩存問題實際上就是系統初始化的時候創建了-128到127之間的緩存數組,當調用valueOf()的時候,首先檢查是都在-128~127之間,在這個範圍內則直接從緩存數組中取出已經建好的對象;若不在這個範圍內,則創建新的Integer對象

包裝類的常用方法

方法名稱 方法作用
intValue() 包裝類轉爲int類型
valueOf() int類型轉包裝類
parseInt() 字符串轉int類型
toString() 包裝類轉爲字符串
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章