天天看點

包裝類及其用法(裝箱拆箱)

基本資料類型的包裝類

Java是面向對象的程式設計語言,但他也包含了8種基本資料類型,這8個基本資料類型不支援面向對象的程式設計機制,基本資料類型的資料也不具備“對象”的特征:沒有屬性,方法可以被調用;
這8種基本資料類型帶來了一定的友善之處:可以進行簡單有效的正常資料處理;但某些時候,基本資料類型就會有寫制約:所有引用類型的變量都繼承了Object類,都可以當成Object類型變量使用,但基本資料類型就不行,為了解決8種基本類型不能當成Object類型變量使用的問題,Java提供了包裝類的概念,為8種基本資料類型分别定義了相應的引用類型,并稱之為基本資料類型的包裝類。
基本資料類型 包裝類
byte Byte
short Short
int Integer
long Long
char Character
float Float
double Double
boolean Boolean

把基本資料類型包裝成包裝類執行個體是通過對應包裝類的構造器來實作的,8個包裝類中除了Character之外,還可以通過傳入一個字元串參數來建構包裝類對象。

public class Test{
	public static void main(String[] args){
		//通過構造器把boolean包裝成包裝類對象
		boolean b = true;
		Boolean b1 = new Boolean(b);
		//通過構造器把int包裝成包裝類對象
		int i = 9;
		Integer i1 = new Integer(i);
		//把一個字元串轉換成Float對象
		Float f = new Float("3.1415");
		//把一個字元串轉換成Boolean對象
		Boolean bo = new Boolean("false"); 
	}
}
           
當用一個字元串來建立對象,傳入的字元串不能轉換成對應基本類型變量時,運作時會出現java.lang.NumberFormatException異常;
當用一個字元串建立Boolean對象時,如果傳入的是true或者true不同字母大小寫變化的字元,如True,tRue,等時,都會建立true對應的對象,如果不是true則會建立false的對象;

獲得包裝類對象的基本資料類型變量

格式:xxxValue()

//取出Integer對象裡的int變量
int i = in.intValue();
//取出Float裡的float變量
float f = fl.floatValue();
           

intValue():int–傳回類型

longValue():long

shortValue():short

floatValue():float

doubleValue():double

byteValue():byte

自動裝箱,自動拆箱

JDK1.5提供了自動裝箱(Autoboxing)和自動拆箱(AutoUnboxing)功能;

自動裝箱(Autoboxing):可以直接把一個基本類型變量直接賦給對應的包裝類變量;

自動拆箱(AutoUnboxing):允許直接把包裝類對象直接賦給一個對應的基本類型變量;

注意:判斷兩個包裝類是否相等要用equals()方法;

注意:對于自動裝箱時的Integer var = ?時,在-128~127中間的數的指派Integer對象會在Integer常量池産生,之後再指派會複用已有對象,而在這個數值範圍之外的指派會在堆上産生,不會複用已有對象;
//Integer num1 = 130 ;
//Integer num2 = 130 ;
//System.out.println(num1 == num2);//false
Integer num1 = 120 ;
Integer num2 = 120 ;
System.out.println(num1 == num2);//true
           
Integer num1 = new Integer(10) ;
Integer num2 = new Integer(10) ;
System.out.println(num1 == num2);//false
System.out.println(num1 == new Integer(10));//false
System.out.println(num1.equals(new Integer(10)));//true
           

使用new的對象是引用類型變量,用

==

比較引用類型比較的是位址,num1和num2是兩個對象,是以位址肯定是不一樣的;

引用類型比較内容時因該使用equals()方法;

阿裡編碼規範:使用int還是Integer?

關于基本資料類型與包裝資料類型的使用标準如下:

1) 【強制】所有的 POJO 類屬性必須使用包裝資料類型。

2) 【強制】RPC 方法的傳回值和參數必須使用包裝資料類型。

3) 【推薦】所有的局部變量使用基本資料類