二十八、基本型別包裝類

weixin_34208283發表於2018-08-21

一、 基本型別包裝類概述

在實際程式使用中,程式介面上使用者輸入的資料都是以字串型別進行儲存的。而程式開發中,我們需要把字串資料,根據需求轉換成指定的基本資料型別,如年齡需要轉換成int型別,考試成績需要轉換成double型別等。那麼,想實現字串與基本資料之間轉換怎麼辦呢?
Java中提供了相應的物件來解決該問題,基本資料型別物件包裝類:java將基本資料型別值封裝成了物件。封裝成物件有什麼好處?可以提供更多的操作基本數值的功能。
8種基本型別對應的包裝類如下:

1543124-a3638a440b1f790b.png
包裝類

其中需要注意int對應的是Integer,char對應的Character,其他6個都是基本型別首字母大寫即可。
基本資料型別物件包裝類特點:用於在基本資料和字串之間進行轉換。

二、基本型別和String的相互轉換

  • 將字串轉成基本型別:


    1543124-aa36c99c43ed56f3.png
    parseXXX.png

parseXXX(String s);其中XXX表示基本型別,引數為可以轉成基本型別的字串,如果字串無法轉成基本型別,將會發生數字轉換的問題 [NumberFormatException]。

System.out.println(Integer.parseInt("123") + 2);
//列印結果為 125

  • 將基本數值轉成字串有3種方式:
    1. 基本型別直接與””相連線即可;34+""
    2. 呼叫String的valueOf方法;String.valueOf(34) ;


      1543124-3cd0b8be5f2c82d0.png
      基本型別轉String.png
  1. 呼叫包裝類中的toString方法;Integer.toString(34) ;


    1543124-c8699908482494ae.png
    toString方法.png

三、 基本資料型別和包裝類的相互轉換

使用int型別與Integer物件轉換進行演示,其他基本型別轉換方式相同。

  • 基本數值---->包裝物件


    1543124-11b939feff29f4c1.png
    integer.png

Integer i = new Integer(4);//使用建構函式函式
Integer ii = new Integer("4");//建構函式中可以傳遞一個數字字串


1543124-c88a79047c5afbf2.png
integer2.png

Integer iii = Integer.valueOf(4);//使用包裝類中的valueOf方法
Integer iiii = Integer.valueOf("4");//使用包裝類中的valueOf方法

  • 包裝物件---->基本數值


    1543124-4e7e422fcabbaf63.png
    int.png

int num = i.intValue();

四、自動拆裝箱

在需要的情況下,基本型別與包裝型別可以通用。有些時候我們必須使用引用資料型別時,可以傳入基本資料型別。
比如:
基本型別可以使用運算子直接進行計算,但是引用型別不可以。而基本型別包裝類作為引用型別的一種卻可以計算,原因在於,Java”偷偷地”自動地進行了物件向基本資料型別的轉換。
相對應的,引用資料型別變數的值必須是new出來的記憶體空間地址值,而我們可以將一個基本型別的值賦值給一個基本型別包裝類的引用。原因同樣在於Java又”偷偷地”自動地進行了基本資料型別向物件的轉換。
 自動拆箱:物件轉成基本數值
 自動裝箱:基本數值轉成物件

Integer i = 4;//自動裝箱。相當於Integer i = Integer.valueOf(4);
i = i + 5; //等號右邊:將i物件轉成基本數值(自動拆箱) i.intValue() + 5; 加法運算完成後,再次裝箱,把基本數值轉成物件。

 自動裝箱(byte常量池)細節的演示
當數值在byte範圍之內時,進行自動裝箱,不會新建立物件空間而是使用原來已有的空間。

Integer a = new Integer(3);
Integer b = new Integer(3);
System.out.println(a==b);//false
System.out.println(a.equals(b));//true

System.out.println("---------------------");
Integer x = 127;
Integer y = 127;
//在jdk1.5自動裝箱時,如果數值在byte範圍之內,不會新建立物件空間而是使用原來已有的空間。
System.out.println(x==y); //true
System.out.println(x.equals(y)); //true


相關文章