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