14.java 基本數據類型的包裝類

概念

java在設計之初,有一個基本原則:一切皆對象。但是基本數據類型不是對象,不具備“對象”的特性——不攜帶屬性、沒有方法可調用。爲了解決此類問題,Java爲每種基本數據類型分別設計了對應的類,稱之爲包裝類(Wrapper Classes).

基本數據類型及對應的包裝類

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

每個包裝類的對象可以封裝一個相應的基本類型的數據,並提供了其它一些有用的方法。包裝類對象一經創建,其內容(所封裝的基本類型數據值)不可改變.

包裝類雖然都是object的子類,但嚴格來說又可分爲兩種:

  1. 對象包裝類(object直接子類):Character、Boolean
  2. 數值包裝類(Number直接子類):Byte、Short、Integer、Long、Float、Double

Number繼承了Object類,是一個抽象類。裏面定義了六個抽象方法:byteValue()、shortValue()、intValue()、longValue()、floatValue()、doubleValue()。

數據的裝箱與拆箱

基本類型和對應的包裝類可以相互裝換:

  • 由基本類型向對應的包裝類轉換稱爲裝箱,例如把 int 包裝成 Integer 類的對象;
  • 包裝類向對應的基本類型轉換稱爲拆箱,例如把 Integer 類的對象重新簡化爲 int;

示例:

public class testDemo {
    public static void main(String[] args) {
        int m = 500;
        Integer obj = new Integer(m); // 手動裝箱
        int n = obj.intValue(); // 手動拆箱
        System.out.println("n = " + n);
        Integer obj1 = new Integer(500);
        System.out.println("obj 等價於 obj1?" + obj.equals(obj1));
    }
}
輸出結果:
n = 500
obj 等價於 obj1?true

自動拆箱和裝箱

上面的例子都需要手動實例化一個包裝類,稱爲手動拆箱、裝箱。Java 1.5 之前必須手動拆箱裝箱。
Java 1.5 之後可以自動拆箱裝箱,也就是在進行基本數據類型和對應的包裝類轉換時,系統將自動進行,並且可以直接利用包裝類進行數學計算。

示例:

public class testDemo {
    public static void main(String[] args) {
        Integer obj = 10; // 自動裝箱
        int n = obj; // 自動拆箱
        System.out.println("n = " + n);
        System.out.println(obj * 2);  //包裝類直接進行數學計算。
        Integer obj1 = 10;
        System.out.println("obj 等價於 obj1?" + obj.equals(obj1));
    }
}
輸出結果:
n = 10
20
obj 等價於 obj1?true

由於存在自動裝箱,那麼object可以接收一切數據類型了,包括基本數據類型。

流程:基本數據類型--> 自動裝箱--> 向上轉型爲object

但object類型不能直接轉爲基本數據類型,要先轉爲對應的包裝類,然後自動拆箱。

手動裝箱與自動裝箱的區別

手動裝箱與自動裝箱與String兩種實例化方式的區別是一樣的。

自動裝箱(即直接賦值)將會比使用構造方法的方式節省一塊堆內存空間,並自動入對象池。而手動裝箱(使用構造方法)會產生兩塊堆內存,而且不會保存在對象池中。

但是和String不同的是包裝對象沒有intern()方法,無法手動入池。

示例:

public class testDemo {
    public static void main(String[] args) {
      Integer obja = 10;//直接賦值,自動裝箱
      Integer objb = 10; //直接賦值,自動裝箱
      Integer objc = new Integer(10); //手動裝箱
      
      System.out.println(obja == objb);
      System.out.println(obja == objc);
      System.out.println(objb == objc);
      System.out.println(obja.equals(objc));
    }
}
輸出結果:
true
false
false
true

數據類型的轉換

包裝類提供了基本數據類型和String類型相互轉換的功能。

將 String 轉爲基本數據類型

Integer類:
public static int parseInt(String s)

Double類:
public static double parseDouble(String s)

Boolean類:
public static boolean parseBoolean(String s)
.....

需要注意的是Character類裏面並不存在將字符串變爲字符的方法,因爲String類有一個charAt()的方法,可以根據索引取出字符。

基本數據類型轉爲String

有兩種方式:

  1. 任何基本數據類型與字符串使用了"+"操作之後都將轉爲String類型。
  2. 在String類中定義有valueOf()方法,該方法可以接收所有的基本數據類型。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章