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);
}
}
}
