1.包裝類是什麼? java中我們經常將基本數據類型轉換為對象,例:將基本數據類型存儲到object[]數組或集合中進行操作 為瞭解決這個問題,Java在設計類的時候為每個基本數據類型設計了一個對應的類進行代表 這八個和基本數據類型對應的類統稱包裝類 包裝類位於java.lang包下 以下是八種數據 ...
1.包裝類是什麼?
java中我們經常將基本數據類型轉換為對象,例:將基本數據類型存儲到object[]數組或集合中進行操作
為瞭解決這個問題,Java在設計類的時候為每個基本數據類型設計了一個對應的類進行代表
這八個和基本數據類型對應的類統稱包裝類
包裝類位於java.lang包下
以下是八種數據類型對應的包裝類
byte--Byte
boolean--Boolean
short--Short
char--Character
int--Integer(常用)
long--Long
float--Float
double--Double
這八個包裝類,只有int和char對應的包裝類有比較大的差別
2.包裝類的用法
包裝類的主要用途有兩種:
1.作為和基本數據類型對應的類型存在,方便涉及到對象的操作,如Object[]、集合等的操作
2.包含每種基本數據類型的相關屬性,如最大值和最小值等,以及相關的操作方法(這些操作方法的作用是在基本數據類型、包裝類對象、字元串之間提供相互之間的轉化)
例:(Interger類的使用,其他包裝類用法類似)
3.自動裝箱和拆箱
自動裝箱和拆箱就是將基本數據類型和包裝類之間進行自動的相互轉換。(JDK1.5後,java才有自動裝箱和拆箱)
1.自動裝箱
基本數據類型處於需要對象的環境中時,就會自動轉換為“對象”。
例:在JDK1.5之前,Integer i=5是錯誤的,必須寫成Integer i=new Integer(5),這樣實現了基本數據類型轉換為包裝類。
而JDK1.5之後,Integer i=5這樣的語句就可以實現將基本數據類型轉換為包裝類。
這是因為JVM幫我們執行了Integer i=Ingeter.valueOf(5)這句話。這就是自動裝箱。
2.自動拆箱
每當需要一個值的時候,對象回自動轉成基本數據類型,沒必要再去顯示調用intValue()、doubleValue()等轉型方法。
例:Integer i=5;int j=1;這樣的過程就是自動拆箱
總結:
自動裝箱的過程是通過調用包裝了的valueOf()方法實現的,而自動拆箱過程是通過調用包裝類的xxxValue()方法實現的
例:
4.包裝類緩存問題
整形、char型所對應的包裝類,在自動裝箱時,對於-128~127這個區間的值會進行緩存處理,其目的是提高效率
緩存處理原理:
如果數據在-128~127之間,那麼在類的載入時就已經為該區間的每個數值創建了對象,並將這256個對象存放到一個名為cache的數組中
。每當自動裝箱過程發生時,或者手動調用valurOf()時,就會先判斷數據是否在該區間,如果在,則直接獲取數組中對應的包裝類對象引用
,如果不在則會通過new調用包裝類的構造方法來創建對象。
例: