int和Integer的區(qū)別(equals和==)

? 在這里,我首先講一下常量池的概念和在jvm里面內(nèi)存存儲情況。

1:常量池(constant pool),就是存放常量的池子(為什么會有常量池這種東西存在我在這里不做闡述,可以看看java虛擬機(jī)內(nèi)存分析)。


2:int / Integer 在內(nèi)存中的位置:首先我們舉個(gè)列子:

三種創(chuàng)建整型方法

上面的三種創(chuàng)建整型方法大家應(yīng)該再熟悉不過了,但是他們在內(nèi)存中的存儲位置卻有著很大區(qū)別。

int a =1 和Integer a1 =1 其實(shí)是一種形式,只不過Integer a1 =1 最終是做了拆箱,和 int a =1 是一個(gè)東西 ,這里沒有用new關(guān)鍵字而是直接賦值,內(nèi)存分析如下,首先會查找常量池中有沒有該數(shù)據(jù),如果有則直接返回引用,如果沒有則在常量池中創(chuàng)建該數(shù)據(jù)再返回引用。

Integer c1 =new Integer(1),內(nèi)存分析如下:首先查找常量池有沒有該數(shù)據(jù),如果沒有則首先在棧內(nèi)存創(chuàng)建該引用(c1),在堆內(nèi)存創(chuàng)建具體對象(new Integer(1)),并且在常量池中創(chuàng)建該對象,返回棧內(nèi)存的引用;如果有則直接返回棧內(nèi)存地址的引用。



3:== 比較說明

比較基本數(shù)據(jù)類型:值是否相等

比較引用類型:比較引用是否相等(具體點(diǎn):內(nèi)存地址引用是否相同)



4:注意點(diǎn):new Integer(int num) 和int 比較會做強(qiáng)制轉(zhuǎn)換。用new形式創(chuàng)建Integer和int比較,會將new Integer()強(qiáng)制轉(zhuǎn)換成int類型,見下圖:


int常量


構(gòu)造方法



5:案例

demo

6:jvm中常量池位置

? ? ? 1.7之前,存在于方法區(qū)。
? ? ? 1.7,存在于永久代
? ? ? 1.7之后,存在于元空間,就是pc直接內(nèi)存,因?yàn)?.8刪除了永久代。


7:equals()方法
? ? ? ?直接看Integer重寫Object的equals方法,直接比較的具體指是否相等。值相等即為true。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 這篇文章是我之前翻閱了不少的書籍以及從網(wǎng)絡(luò)上收集的一些資料的整理,因此不免有一些不準(zhǔn)確的地方,同時(shí)不同JDK版本的...
    高廣超閱讀 16,061評論 3 83
  • Swift1> Swift和OC的區(qū)別1.1> Swift沒有地址/指針的概念1.2> 泛型1.3> 類型嚴(yán)謹(jǐn) 對...
    cosWriter閱讀 11,679評論 1 32
  • 一:在JAVA中,有六個(gè)不同的地方可以存儲數(shù)據(jù): 1. 寄存器(register)。 這是最快的存儲區(qū),因?yàn)樗?..
    辰321閱讀 511評論 0 0
  • 所有知識點(diǎn)已整理成app app下載地址 J2EE 部分: 1.Switch能否用string做參數(shù)? 在 Jav...
    侯蛋蛋_閱讀 2,713評論 1 4
  • 引入 == 基本數(shù)據(jù)類型(也稱原始數(shù)據(jù)類型) :byte,short,char,int,long,float,do...
    凱諾婷閱讀 1,311評論 1 7

友情鏈接更多精彩內(nèi)容