更新時間:2020-07-14 14:34:17 來源:動力節(jié)點 瀏覽2471次
八種基本數(shù)據(jù)類型的大小,以及他們的封裝類。
(1)八種基本數(shù)據(jù)類型和封裝類
(2)自動裝箱和自動拆箱
什么是自動裝箱拆箱
基本數(shù)據(jù)類型的自動裝箱(autoboxing)、拆箱(unboxing)是自J2SE 5.0開始提供的功能。
一般我們要創(chuàng)建一個類的對象實例的時候,我們會這樣:
Class a=new Class(parameter);
當我們創(chuàng)建一個Integer對象時,卻可以這樣:
Integer i=100;(注意:不是int i=100;)
實際上,執(zhí)行上面那句代碼的時候,系統(tǒng)為我們執(zhí)行了:Integer i=Integer.valueOf(100);
此即基本數(shù)據(jù)類型的自動裝箱功能。
基本數(shù)據(jù)類型與對象的差別
基本數(shù)據(jù)類型不是對象,也就是使用int、double、boolean等定義的變量、常量。
基本數(shù)據(jù)類型沒有可調(diào)用的方法。
eg:int t=1;t.后面是沒有方法滴。
Integer t=1;t.后面就有很多方法可讓你調(diào)用了。
什么時候自動裝箱
例如:Integer i=100;
相當于編譯器自動為您作以下的語法編譯:Integer i=Integer.valueOf(100);
什么時候自動拆箱
自動拆箱(unboxing),也就是將對象中的基本數(shù)據(jù)從對象中自動取出。如下可實現(xiàn)自動拆箱:
Integer i=10;//裝箱
int t=i;//拆箱,實際上執(zhí)行了int t=i.intValue();
在進行運算時,也可以進行拆箱。
Integer i=10;
System.out.println(i++);
Integer的自動裝箱
//在-128~127 之外的數(shù)
?Integer i1 =200;??
?Integer i2 =200;? ? ? ? ??
?System.out.println("i1==i2: "+(i1==i2));? ? ? ? ? ? ? ? ? ?
?// 在-128~127 之內(nèi)的數(shù)
?Integer i3 =100;??
?Integer i4 =100;??
?System.out.println("i3==i4: "+(i3==i4));
輸出的結(jié)果是:
i1==i2: falsei3==i4: true
說明:
equals() 比較的是兩個對象的值(內(nèi)容)是否相同。
"==" 比較的是兩個對象的引用(內(nèi)存地址)是否相同,也用來比較兩個基本數(shù)據(jù)類型的變量值是否相等。
前面說過,int 的自動裝箱,是系統(tǒng)執(zhí)行了 Integer.valueOf(int i),先看看Integer.java的源碼:
public static Integer valueOf(int i) {
? ?if(i >= -128 && i <= IntegerCache.high) // 沒有設(shè)置的話,IngegerCache.high 默認是127
? ? ? ?return IntegerCache.cache[i + 128];
? ?else
? ? ? ?return new Integer(i);
}
對于–128到127(默認是127)之間的值,Integer.valueOf(int i)返回的是緩存的Integer對象!!!(并不是新建對象)
所以范例中,i3與i4實際上是指向同一個對象。
而其他值,執(zhí)行Integer.valueOf(int i)返回的是一個新建的Integer對象,所以范例中,i1與i2指向的是不同的對象。
當然,當不使用自動裝箱功能的時候,情況與普通類對象一樣,請看下例:
Integer i3 =new Integer(100);?
Integer i4 =new Integer(100);?
System.out.println("i3==i4: "+(i3==i4));//顯示false
以上就是動力節(jié)點java培訓(xùn)機構(gòu)的小編針對“大家經(jīng)常復(fù)習(xí)的一些Java基礎(chǔ)試題及答案”的內(nèi)容進行的回答,希望對大家有所幫助,如有疑問,請在線咨詢,有專業(yè)老師隨時為你服務(wù)。
相關(guān)閱讀
初級 202925
初級 203221
初級 202629
初級 203743