Java之拆箱和裝箱

拆箱和裝箱

自動拆箱和裝箱是從JDK5.0纔開始有的,它方便了基本數據類型和其對應的包裝類型之>間的轉換。
將一個基本數據類型的值賦給其所對應的包裝類型稱爲裝箱;將一個基本數據類型包>裝類類型的值賦給其所對應的基本數據類型稱爲拆箱
由於裝箱和拆箱的過程是自動進行的非人爲轉換,所以稱作爲自動裝箱和拆箱.。

//拆箱和裝箱:
	//裝箱:將基本數據類型轉換爲包裝類
	Integer a = 12;//將int類型轉換爲Integer類型
	//拆箱:將包裝類類型轉換爲基本數據類型
	int aa = a;
/*
自動拆箱和裝箱的過程由編譯器自動完成:
通過包裝類的valueOf方法將基本數據類型包裝成引用類型;
通過包裝類對象xxxValue方法將引用類型變爲對應的基本類型。
所以以上代碼經過編譯器編譯後爲:
*/
	Integer a = Integer.valueOf(12);
	int aa = a.intValue();

包裝類特點

1、緩存機制:

Java對部分經常使用的數據採用緩存技術,即第一次使用該數據則創建該數據對象並對其進行緩存,當再次使用等值對象時直接從緩存中獲取,從而提高了程序執行性能。
1、byte、short、int和long所對應包裝類的數據緩存範圍爲 -128~127(包括-128和127)
2、float和double所對應的包裝類沒有數據緩存範圍
3、char所對應包裝類的數據緩存範圍爲 0~127(包括0和127)
4、boolean所對應包裝類的數據緩存爲true和false

//1.Byte Short Integer Long 這幾個類型將-128~127進行了緩存
		Integer b1 = 127;
		Integer b2 = 127;
		System.out.println(b1==b2);//因爲127被緩存了,所以二者地址相同
		b1 = new Integer(127);
		b2 = new Integer(127);
		System.out.println(b1==b2);//但如果new一個新的對象,則不考慮緩存了
		//2.Float Double類型無任何緩存
		//3.Boolean類型的true和false均進行的緩存
		//4.Character類型 將0~127進行了緩存
		Character c1 = 0;
		Character c2 = 0;
		System.out.println(c1==c2);

結果爲:

true
false
true

2、自動拆箱:

基本數據類型和基本數據類型封裝型進行“==”運算符的比較時,基本數據類型封裝型會先自動拆箱變爲基本數據類型後再進行比較。

//自動拆箱:和基本數據類型進行比較時,會自動轉換爲基本數據類型
		int c = 128;
		Integer cc = 128;
		Integer ccc = new Integer(128);
		System.out.println(c==cc);
		System.out.println(c==ccc);
		System.out.println(cc==ccc);

結果爲:

true
true
false

包裝類中equals方法

基本數據類型包裝類中的equals方法用於比對相同包裝類中的值是否相等,如果兩者比較的包裝類類型不同則返回false。

	Integer a = 128;
	Integer b = 128;
	Short c = 128;
	System.out.println(a==b);
	//由於128超過了緩存範圍,所以a和b地址不同,返回false
	System.out.println(a.equals(b));
	//雖然128超過了緩存範圍,但是由於a和b的包裝類以及值均相同,所以返回true
	System.out.println(a.equals(c));
	//雖然a和c的值相同,但由於包裝類不同,所以返回false

結果:

false
true
false

包裝類中parseXXX方法

基本數據類型包裝類中的parseXXX(String s)方法用於將字符串類型數據轉換爲相應的基本數據類型(除了Character類)

//將字符串轉換爲其他數據類型
	int a = Integer.parseInt("-128");
	System.out.println(a);
			
	long b = Long.parseLong("127");
	System.out.println(b);
			
	double c = Double.parseDouble("1.11");
	System.out.println(c);
			
	boolean e = Boolean.parseBoolean("true");
	System.out.println(e);

結果:

-128
127
1.11
true

注意:char類型包裝類Character沒有相應的parseXXX方法。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章