好程序員Java培訓(xùn)分享int和Integer的區(qū)別

  好程序員Java 培訓(xùn)分享int 和 Integer 的區(qū)別, 在說int 和 Integer 的區(qū)別之前,先要弄清楚兩個(gè)問題:

治多網(wǎng)站建設(shè)公司創(chuàng)新互聯(lián),治多網(wǎng)站設(shè)計(jì)制作,有大型網(wǎng)站制作公司豐富經(jīng)驗(yàn)。已為治多上千提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\外貿(mào)營銷網(wǎng)站建設(shè)要多少錢,請找那個(gè)售后服務(wù)好的治多做網(wǎng)站的公司定做!

 一、Java基本數(shù)據(jù)類型及其封裝類

 二、Java自動(dòng)拆箱和自動(dòng)裝箱

 Java自動(dòng)拆箱和自動(dòng)裝箱

 1 、自動(dòng)裝箱

 自動(dòng)裝箱其實(shí)就是將基本數(shù)據(jù)類型轉(zhuǎn)換為引用數(shù)據(jù)類型(對象)

 2 、自動(dòng)拆箱

 自動(dòng)拆箱其實(shí)就是將引用數(shù)據(jù)類型轉(zhuǎn)化為基本數(shù)據(jù)類型

 int  和  Integer 的區(qū)別

 分析

 int

 Integer

 int  與  Integer  的區(qū)別

  相同值下的 int  和  Integer  的比較結(jié)果

 分析

 int

 int  是Java的基本數(shù)據(jù)類型。

 Integer

 Integer  繼承了 Object 類,是對象類型,是  int  的包裝類。

 int  與  Integer  的區(qū)別

 值的存儲(chǔ)

 int  存儲(chǔ)在棧中

 Integer  對象的引用存儲(chǔ)在??臻g中,對象的數(shù)據(jù)存儲(chǔ)在堆空間中。

 初始化

 int  初始化值為 0 。

 Integer  初始化值為 null 。

 傳參

 int  是值傳遞,棧中的數(shù)據(jù)不可變。

 Integer  對象是引用傳遞,引用不可變,但是引用指向的堆空間地址中的值是可以改變的。

 泛型支持

  泛型不支持int ,但是支持 Integer 。

 運(yùn)算

 int  可以直接做運(yùn)算,是類的特性。

 Integer  的對象可以調(diào)用該類的方法,但是在拆箱之前不能進(jìn)行運(yùn)算,需要轉(zhuǎn)化為基本類型 int 。

 int 是基本數(shù)據(jù)類型, Integer 是引用數(shù)據(jù)類型;

 int 默認(rèn)值是 0 , Integer 默認(rèn)值是 null ;

 int 類型直接存儲(chǔ)數(shù)值, Integer 需要實(shí)例化對象,指向?qū)ο蟮牡刂贰?/p>

  相同值下的 int  和  Integer  的比較結(jié)果

  兩個(gè)通過new 生成的變量,結(jié)果為 false 。

 int  和  Integer  的值比較,若兩者的值相等,則為 true 。

  (注意:在比較時(shí),Integer 會(huì)自動(dòng)拆箱為 int 類型,然后再做比較。)

 new  生成的 Integer 變量 和 非 new  生成的 Integer 變量比較,,結(jié)果為 false 。

  (注意:new  生成的 Integer 變量的值在堆空間中,非 new  生成的 Integer 變量的值在在常量池中。)

  (注意:非new 生成的 Integer 變量,會(huì)先判斷常量池中是否有該對象,若有則共享,若無則在常量池中放入該對象;也叫享元模式,后面再說。)

  兩個(gè)非new  生成的 Integer 對象比較,則結(jié)果為 true 。

  (注意:此處需要一個(gè)前提:值的范圍在 -128 ~ 127  之間。

 涉及到Java 對 int  與  Integer  的自動(dòng)裝箱和拆箱的一種模式:享元模式— flyweight ,為了加強(qiáng)對簡單數(shù)字的重復(fù)利用。

  在賦值時(shí),其實(shí)是執(zhí)行了Integer 的 valueOf() 方法。

  當(dāng)值在 -128 ~ 127 之間時(shí),Java 會(huì)進(jìn)行自動(dòng)裝箱,然后會(huì)對值進(jìn)行緩存,如果下次再有相同的值,會(huì)直接在緩存中取出使用。緩存是通過Integer 的內(nèi)部類 IntegerCache 來完成的。

  當(dāng)值超出此范圍,會(huì)在堆中new 出一個(gè)對象來存儲(chǔ)。

 PS :自動(dòng)裝箱與拆箱是在 JDK1.5 中出現(xiàn)的。

?。?/p>

  內(nèi)部類IntegerCache

 通過此類可以緩存簡單數(shù)字。

  緩存的數(shù)大小可以由 -XX : AutoBoxCacheMax =  控制。

 jvm 初始化時(shí),Java.lang.Integer.IntegerCache.high 屬性可以設(shè)置并保存在私有系統(tǒng)屬性中。

  規(guī)定了low 屬性的值: -128

 來看個(gè)例子

好程序員Java培訓(xùn)分享int和Integer的區(qū)別

 1 : a == b  嗎? 廢話,肯定不相等。兩個(gè) new 出來的對象地址不一樣。

 2 : c == d  嗎? 這個(gè)也是廢話,都是基本數(shù)據(jù)類型的值肯定相等。

 3 :現(xiàn)在的關(guān)鍵問題是  e == f  嗎?  g == h  嗎?

  答案是:e == f; g != h 。為什么會(huì)出現(xiàn)這種情況 ? 因?yàn)?ava 在進(jìn)行編譯時(shí)  Integer g = 130 會(huì)被編譯成  Integer.valueOf(130)  ,這個(gè)可以通過反編譯 class 文件看到。而通過 Integer 源碼可以得出, Integer.valueOf()  方法會(huì)在數(shù)值 -128~127 之間會(huì)對 Integer 進(jìn)行緩存,不會(huì)再重新 new 一個(gè),所以  e==f  ;當(dāng)數(shù)值二大于 127 或者小于 -128 的時(shí)候則會(huì)重新 new 一個(gè),所以 g != h  。

 Integer 的 valueOf 方法如下

好程序員Java培訓(xùn)分享int和Integer的區(qū)別

 4 : c == e  嗎,  i == j  嗎?

 答案都是相等的。因?yàn)榉庋b類和基本數(shù)據(jù)類型進(jìn)行比較的時(shí)候,Java 會(huì)自動(dòng)拆箱,然后比較數(shù)值是  否相等。

 綜上,我們可以得出幾個(gè)結(jié)論:

 1 、都是封裝類,都是 new 出來的,肯定不相等。因?yàn)閷ο蟮膬?nèi)存地址不一樣。

 2 、都是封裝類,都不是 new 出來的,如果值在 -128~127 之間,那就相等,否則不相等。

 3 、如果是封裝類和基本類型進(jìn)行比較,只要數(shù)值相等那就相等,否則就不相等。因?yàn)榉庋b類和基本數(shù)據(jù)類型進(jìn)行比較的時(shí)候會(huì)有一個(gè)自動(dòng)拆箱操作。

 4 、都是基本數(shù)據(jù)類型,如果數(shù)值相等,那就相等;否則不相等。

網(wǎng)站題目:好程序員Java培訓(xùn)分享int和Integer的區(qū)別
網(wǎng)頁URL:http://bm7419.com/article12/jcegdc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供軟件開發(fā)動(dòng)態(tài)網(wǎng)站、移動(dòng)網(wǎng)站建設(shè)自適應(yīng)網(wǎng)站、微信小程序、靜態(tài)網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)頁設(shè)計(jì)公司