新聞中心
一、java基本數(shù)據(jù)類型及其封裝類
創(chuàng)新互聯(lián)成立與2013年,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項(xiàng)目網(wǎng)站設(shè)計(jì)、成都做網(wǎng)站網(wǎng)站策劃,項(xiàng)目實(shí)施與項(xiàng)目整合能力。我們以讓每一個夢想脫穎而出為使命,1280元沐川做網(wǎng)站,已為上家服務(wù),為沐川各地企業(yè)和個人服務(wù),聯(lián)系電話:13518219792
java數(shù)據(jù)類型有基本數(shù)據(jù)類型和引用數(shù)據(jù)類型,為了方便將基本數(shù)據(jù)類型當(dāng)作對象處理,java引入了基本數(shù)據(jù)類型相對應(yīng)的封裝類,如int封裝類是Integer。
二、java自動拆箱和自動裝箱
1、自動裝箱
自動裝箱其實(shí)就是將基本數(shù)據(jù)類型轉(zhuǎn)換為引用數(shù)據(jù)類型(對象)
2、自動拆箱
自動拆箱其實(shí)就是將引用數(shù)據(jù)類型轉(zhuǎn)化為基本數(shù)據(jù)類型
代碼如下:
public static void main(String[] args) { Integer a = 1;//這里就用到了自動裝箱;等同于Integer a = new Integer(1); int b = a - 1;//對象不能直接進(jìn)行計(jì)算,所以這里有自動拆箱的操作,將a對象轉(zhuǎn)換成基本數(shù)據(jù)類型,然后-1 System.out.println(a); System.out.println(b); }
打印結(jié)果:
1 0
三、int和Interger的區(qū)別
從上面我們就能看出int和Interger的區(qū)別:
int是基本數(shù)據(jù)類型,Integer是引用數(shù)據(jù)類型;
int默認(rèn)值是0,Integer默認(rèn)值是null;
int類型直接存儲數(shù)值,Integer需要實(shí)例化對象,指向?qū)ο蟮牡刂贰?/p>
說到這,是不是認(rèn)為就這么完事了,其實(shí)它們之間還有一些細(xì)節(jié)方面的區(qū)別:如下
public static void main(String[] args) { Integer a = new Integer(1); Integer b = new Integer(1); int c = 1; int d = 1; Integer e = 1; Integer f = 1; Integer g = 130; Integer h = 130; Integer i = new Integer(130); int j = 130; }
1:a == b 嗎? 廢話,肯定不相等。兩個new出來的對象地址不一樣。
2:c == d 嗎? 這個也是廢話,都是基本數(shù)據(jù)類型的值肯定相等。
3:現(xiàn)在的關(guān)鍵問題是 e == f 嗎? g == h 嗎?
答案是:e == f; g != h。
為什么會出現(xiàn)這種情況?因?yàn)閍va在進(jìn)行編譯時 Integer g = 130會被編譯成 Integer.valueOf(130) ,這個可以通過反編譯class文件看到。而通過Integer源碼可以得出,Integer.valueOf() 方法會在數(shù)值-128~127之間會對Integer進(jìn)行緩存,不會再重新new一個,所以 e==f ;當(dāng)數(shù)值二大于127或者小于-128的時候則會重新new一個,所以g != h 。
Integer的valueOf方法如下:
public static Integer valueOf(int i) { //IntegerCache.low == -128 ;IntegerCache.high == 127 //當(dāng)數(shù)值大于-128小于127時,進(jìn)行緩存;否則重新new一個。 if (i >= IntegerCache.low && i <= IntegerCache.high) return IntegerCache.cache[i + (-IntegerCache.low)]; return new Integer(i); }
4:c == e 嗎, i == j 嗎?
答案都是相等的。因?yàn)榉庋b類和基本數(shù)據(jù)類型進(jìn)行比較的時候,java會自動拆箱,然后比較數(shù)值是否相等。
總結(jié):
1、都是封裝類,都是new出來的,肯定不相等。因?yàn)閷ο蟮膬?nèi)存地址不一樣。
2、都是封裝類,都不是new出來的,如果值在-128~127之間,那就相等,否則不相等。
3、如果是封裝類和基本類型進(jìn)行比較,只要數(shù)值相等那就相等,否則就不相等。因?yàn)榉庋b類和基本數(shù)據(jù)類型進(jìn)行比較的時候會有一個自動拆箱操作。
4、都是基本數(shù)據(jù)類型,如果數(shù)值相等,那就相等;否則不相等。
以上就是java中int與integer的區(qū)別的詳細(xì)內(nèi)容,更多請關(guān)注創(chuàng)新互聯(lián)其它相關(guān)文章!
文章名稱:java中integer和int有什么區(qū)別
瀏覽地址:http://www.dlmjj.cn/article/gdceoo.html