您好,登錄后才能下訂單哦!
基礎(chǔ):
1、int 是 java 的一種基礎(chǔ)數(shù)據(jù)類型,而 integer 是int 的一個(gè)封裝類。
2、Integer 變量必須實(shí)例化之后才能使用,而 int 變量不需要。
3、Integer 實(shí)際是對(duì)象的引用,當(dāng) new 一個(gè) integer 對(duì)象時(shí),實(shí)際上是生成一個(gè)指針指向該對(duì)象;而 int 是直接存儲(chǔ)數(shù)據(jù)值。
4、Integer 的默認(rèn)值是 null ,而 int 的默認(rèn)值是 0。
延伸:
1、因?yàn)?integer 變量實(shí)際上是對(duì) integer 對(duì)象的引用,所以兩個(gè)通過(guò)new 的integer 變量永遠(yuǎn)不相等(因?yàn)?new 生成的是兩個(gè)對(duì)象,其內(nèi)存地址不一樣)。
Integer i = new Integer(100); Integer j = new Integer(100); System.out.print(i == j);//false
2、當(dāng)一個(gè) integer 變量和一個(gè) int 變量比較時(shí),只要兩個(gè)變量的值相等,那么結(jié)果就是true,因?yàn)?integer 本質(zhì)是 int 的一個(gè)封裝類,當(dāng)兩數(shù)比較時(shí),java會(huì)自動(dòng)將 integer拆包,所以本質(zhì)上就是兩個(gè)int 變量的比較。
Integer i = new Integer(100); int j = 100; System.out.print(i == j);//true
3、當(dāng)一個(gè) new 創(chuàng)建的 Integer 變量和一個(gè)非 new 創(chuàng)建的 Integer 變量比較時(shí),結(jié)果為false。因?yàn)榉?new 創(chuàng)建的變量存在 java 常量池中,而 new 創(chuàng)建的變量指向堆中新建的對(duì)象,兩者的內(nèi)存地址不同。
Integer i = new Integer(100); Integer j = 100; System.out.print(i == j);//false
4、當(dāng)兩個(gè)非 new 的 Integer 變量比較時(shí),如果兩個(gè)變量的值在-128到127之間,那么結(jié)果就是 true,否則是 false。
對(duì)于這個(gè)奇怪的結(jié)果,java 的解釋是這樣的:
Integer i = new Integer(100);//在編譯時(shí)會(huì)變成Integer i = Integer.ValueOf(100)
而 java API 中對(duì) Integer.valueOf()的定義如下:
public static Integer valueOf(int i){ assert IntegerCache.high >= 127; if (i >= IntegerCache.low && i <= IntegerCache.high){ return IntegerCache.cache[i + (-IntegerCache.low)]; } return new Integer(i); }
即,對(duì)于 -128~127 的數(shù),java會(huì)進(jìn)行緩存,而下次再對(duì)一個(gè) Integer 變量賦值時(shí),如果在 -128~127 并且已經(jīng)被緩存,那么就會(huì)直接從緩存中調(diào)用。
以上就是java integer和int的區(qū)別有哪些的詳細(xì)內(nèi)容,更多請(qǐng)關(guān)注億速云其它相關(guān)文章!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。