Java有8種基本數據類型,為什么又要出現對應的8種包裝類:
1、Java的8種基本數據類型不支持面向對象編程機制
2、8種基本數據類型不具備“對象”的特性:沒有成員變量、方法可供調用
3、例如:某個方法需要Object類型的參數,但實際需要的卻是2、3這種值,只靠基本的數據類型無法轉換成Object參數傳遞過去
4、為解決8種基本數據類型不能當成Object類型使用的問題,Java提供了包裝類的概念:
8種基本數據類型與對應的包裝類:
byte ------------------------> Byte
short -------------------------> Short
int -------------------------> Integer
long -------------------------> Long
char -------------------------> Character
float -------------------------> Float
double -------------------------> Double
boolean -------------------------> Boolean
5、基本類型與包裝類之間的轉換(JDK1.5之前):
5.1、通過包裝類對應的構造器實現
5.2、通過傳入一些字符串參數,來構建包裝類對象,如:
Integer a = new Integer("5.5");
5.3、如果想獲得包裝類對象中包裝的基本類型變量,可以用包裝類提供的.xxxValue()方法
代碼示例:
public class WrapperClass{ public static void main(String[] args){ //-構造器方法定義Integer包裝類a,並賦值 Integer a=new Integer("5"); System.out.println(a); //-構造器方法定義Double包裝類b,並賦值 Double b=new Double("5.5"); System.out.println(b); //-通過包裝類.xxxValue()方法,從包裝類對象中獲取基本類變量 int c=a.intValue(); System.out.println(c); double d=b.doubleValue(); System.out.println(d); } }
運行結果:
6、基本類型與包裝類之間的轉換(JDK1.5之后):
6.1、自動裝箱(Autoboxing):把一個基本類型的變量,直接賦值給對應的包裝類變量,或者賦值給Object變量(Object是所有類的父類,子類對象可以直接賦給父類變量----Java的向上自動轉型特性)如:
Integer i=3;或Object j=4;
6.2、自動拆箱(AutoUnboxing):把一個包裝類變量,直接賦值給一個基本類型的變量,如:
int a=i;
注意:int b=j;編譯會報錯,原因是:Java有向上自動轉型特性,但不能自動向下轉型,想要轉要加強制轉換,如:
int b = (Integer)j;
代碼示例:
public class AutoBoxingUnboxing{ public static void main(String[] args){ //-自動裝箱 Integer a=3; //-自動拆箱 int b=a; //-直接賦值給Object類型的變量,利用了Java的向上自動轉型特性 Object o=true; if(o instanceof Boolean){ //-Object類型不能直接賦值給Boolean類型,Java不能自動向下轉型,如下代碼會報錯 //Boolean d=o; //-想向下轉型可以用強制轉換方法,如下代碼 Boolean c=(Boolean)o; System.out.println(c); } } }