當前位置:編程學習大全網 - 源碼下載 - 什麽是java中的自動裝箱和自動拆箱

什麽是java中的自動裝箱和自動拆箱

java自動裝箱和拆箱

基本數據類型,如int,float,double,boolean,char,byte,不具備對象的特征,不能調用方法。

裝箱:將基本類型轉換成包裝類對象

int i=10;

Integer x=new Integer(i);手動裝箱

Integer y=10;自動裝箱

拆箱:將包裝類對象轉換成基本類型的值

Integer j=new Integer(8);

int m=j.intValue();//手動拆箱

int n=j;//自動拆箱

java為什麽要引入自動裝箱和拆箱的功能?又是怎麽實現的呢?

主要是用於java集合中,List<Inteter> list=new ArrayList<Integer>();

list集合如果要放整數的話,只能放對象,不能放基本類型,因此需要將整數自動裝箱成對象。

實現原理:javac編譯器的語法糖

public class Main {

public static void main(String[] args) {

Integer i1 = 100;

Integer i2 = 100;

Integer i3 = 200;

Integer i4 = 200;

System.out.println(i1==i2);

System.out.println(i3==i4);

}

}

//結果為:true false

在通過Integer.valueOf()方法創建Integer對象的時候,如果數值在[-128,127]之間,便返回指向IntegerCache.cache中已經存在的對象的引用(位於堆對象池中);否則創建壹個新的Integer對象(創建在java堆中)。上面的代碼中i1和i2的數值為100,因此會直接從cache中取已經存在的對象,所以i1和i2指向的是同壹個對象,而i3和i4則是分別指向不同的對象。

public class Main {

public static void main(String[] args) {

Double i1 = 100.0;

Double i2 = 100.0;

Double i3 = 200.0;

Double i4 = 200.0;

System.out.println(i1==i2);

System.out.println(i3==i4);

}

}

//結果為:false false

為什麽Double類的valueOf方法會采用與Integer類的valueOf方法不同的實現呢?很簡單:在某個範圍內的整型數值的個數是有限的,而浮點數卻不是。

public class Main {

public static void main(String[] args) {

Boolean i1 = false;

Boolean i2 = false;

Boolean i3 = true;

Boolean i4 = true;

System.out.println(i1==i2);

System.out.println(i3==i4);

}

}

//結果為:true true

至於為什麽是這個結果,同樣地,看了Boolean類的源碼也會壹目了然。下面是Boolean的valueOf方法的具體實現:

public static Boolean valueOf(boolean b) {

return (b ? TRUE : FALSE);

}

public class H {

public static void main(String[] args) {

Integer m=10;

int n=10;

System.out.println(m==n);

}

}

//結果為:true

  • 上一篇:摩爾莊園源代碼大全
  • 下一篇:8款讓妳白嫖全網資源的封神網站
  • copyright 2024編程學習大全網