Java包裝類VS基本數據類型

包裝類

針對八種基本數據類型定義相應的引用類型—包裝類(封裝類)
有了類的特點,就可以調用類中的方法, Java纔是真正的面向對象

爲什麼使用包裝類?

基本數據類型無法通過向上轉型獲取到Object提供的方法,而像String卻可以,只因爲String是一個對象而不是一個類型。基本數據類型由於這樣的特性,導致無法參與轉型,泛型,反射等過程。爲了彌補這個缺陷,java提供了包裝類。

包裝類與基本數據類型對照表

在這裏插入圖片描述

基本數據類型與包裝類的相互轉換

基本數據類型包裝成包裝類的實例(裝箱)

  1. 通過包裝類的構造器實現:

    int i = 500;
    Integer t = new Integer(i);
    
  2. 通過字符串參數構造包裝類對象:

    Float f = new Float(4.56);
    
獲得包裝類對象中包裝的基本類型變量 —拆箱

調用包裝類的.xxxValue()方法:

boolean b = bObj.booleanValue();

JDK1.5之後,支持自動裝箱,自動拆箱。但類型必須匹配。

自動裝箱與拆箱

裝箱

裝箱:包裝類使得一個基本數據類型的數據變成了類。有了類的特點,可以調用類中的方法。

裝箱原理(調用包裝類的構造器)
int i = 500;
Integer t = new Integer(i);
拆箱

拆箱:將包裝類中內容變爲基本數據類型

拆箱原理(調用包裝類Xxx的xxxValue())
Integer t = new Integer(500);
int j = t.intValue(); // j = 500, intValue取出包裝類中的數據
自動裝箱與拆箱

JDK1.5之後,支持自動裝箱,自動拆箱。但類型必須匹配。即包裝類與基本數據類型可以直接賦值,不必再調用構造器或者xxxValue()。

示例
//自動裝箱:基本數據類型 --->包裝類
		int num2 = 10;
		Integer in1 = num2;//自動裝箱
		
		boolean b1 = true;
		Boolean b2 = b1;//自動裝箱
		
		//自動拆箱:包裝類--->基本數據類型
		System.out.println(in1.toString());
		
		int num3 = in1;//自動拆箱

基本數據類型、包裝類、String三者之間的相互轉換

基本數據類型與包裝類互相轉換上文相當於上文的裝箱和拆箱的原理,不在闡述。

包裝類在實際開發中用的最多的在於字符串變爲基本數據類型。

String類型 —>基本數據類型、包裝類:調用包裝類的parseXxx(String s)
String str1 = "123";
int num2 = Integer.parseInt(str1);
System.out.println(num2 + 1);
		
String str2 = "true1";
boolean b1 = Boolean.parseBoolean(str2);
System.out.println(b1);
基本數據類型、包裝類—>String類型:調用String重載的valueOf(Xxx xxx)或者做連接運算
  1. 連接運算

    int num1 = 10;
    String str1 = num1 + "";
    
  2. 調用String重載的valueOf(Xxx xxx)

    float f1 = 12.3f;
    String str2 = String.valueOf(f1);//"12.3"
    
    Double d1 = new Double(12.4);
    String str3 = String.valueOf(d1);
    System.out.println(str2);
    System.out.println(str3);//"12.4"
    
圖解基本數據類型、包裝類、String三者之間的相互轉換

在這裏插入圖片描述

思考題

1.思考下面兩種方式輸出的值爲什麼不同?

o1輸出爲1.0

Object o1 = true ? new Integer(1) : new Double(2.0);
System.out.println(o1);//1.0

o1輸出爲1

Object o2;
if (true)
o2 = new Integer(1);
else
o2 = new Double(2.0);
System.out.println(o2);//1
思考

因爲三元運算操作需要保證?後的兩個表達式的數據類型相同,int需要向上轉型爲double

2.比較下列的值是否相同
Integer i = new Integer(1);
Integer j = new Integer(1);
System.out.println(i == j);//false

//Integer內部定義了IntegerCache結構,IntegerCache中定義了Integer[],
//保存了從-128~127範圍的整數。如果我們使用自動裝箱的方式,給Integer賦值的範圍在
//-128~127範圍內時,可以直接使用數組中的元素,不用再去new了。目的:提高效率

Integer m = 1;
Integer n = 1;
System.out.println(m == n);//true

Integer x = 128;//相當於new了一個Integer對象
Integer y = 128;//相當於new了一個Integer對象
System.out.println(x == y);//false
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章