詳解Java中int和Integer的區(qū)別
基本數(shù)據(jù)類型和引用類型
Java是面向?qū)ο蟮木幊陶Z言,一切都是對象,但是為了編程的方便還是引入了基本數(shù)據(jù)類型,為了能夠?qū)⑦@些基本數(shù)據(jù)類型當(dāng)成對象操作,Java為每一個基本數(shù)據(jù)類型都引入了對應(yīng)的包裝類型(wrapper class),int的包裝類就是Integer,從Java 5開始引入了自動裝箱/拆箱機制,使得二者可以相互轉(zhuǎn)換,對應(yīng)如下:
原始類型:boolean,char,byte,short,int,long,float,double
包裝類型:Boolean,Character,Byte,Short,Integer,Long,F(xiàn)loat,Double
Java中的基本數(shù)據(jù)類型只有以上8個,除了基本類型(primitive type),剩下的都是引用類型(reference type)。
三種引用類型:
- 類class
- 接口interface
- 數(shù)組array
int和Integer的區(qū)別
- 1、Integer是int的包裝類,int則是java的一種基本數(shù)據(jù)類型
- 2、Integer變量必須實例化后才能使用,而int變量不需要
- 3、Integer實際是對象的引用,當(dāng)new一個Integer時,實際上是生成一個指針指向此對象;而int則是直接存儲數(shù)據(jù)值
- 4、Integer的默認(rèn)值是null,int的默認(rèn)值是0
延伸:
關(guān)于Integer和int的比較
1、由于Integer變量實際上是對一個Integer對象的引用,所以兩個通過new生成的Integer變量永遠(yuǎn)是不相等的(因為new生成的是兩個對象,其內(nèi)存地址不同)。
Integer i = new Integer(100); Integer j = new Integer(100); System.out.print(i == j); //false
2、Integer變量和int變量比較時,只要兩個變量的值是向等的,則結(jié)果為true(因為包裝類Integer和基本數(shù)據(jù)類型int比較時,java會自動拆包裝為int,然后進(jìn)行比較,實際上就變?yōu)閮蓚€int變量的比較)
Integer i = new Integer(100); int j = 100; System.out.print(i == j); //true
3、非new生成的Integer變量和new Integer()生成的變量比較時,結(jié)果為false。(因為非new生成的Integer變量指向的是java常量池中的對象,而new Integer()生成的變量指向堆中新建的對象,兩者在內(nèi)存中的地址不同)
Integer i = new Integer(100); Integer j = 100; System.out.print(i == j); //false
4、對于兩個非new生成的Integer對象,進(jìn)行比較時,如果兩個變量的值在區(qū)間-128到127之間,則比較結(jié)果為true,如果兩個變量的值不在此區(qū)間,則比較結(jié)果為
falseInteger i = 100; Integer j = 100; System.out.print(i == j); //true
不在-128-127之間:
Integer i = 128; Integer j = 128; System.out.print(i == j); //false
對于第4條的原因:
java在編譯Integer i = 100 ;時,會翻譯成為
Integer i = Integer.valueOf(100);,而java API中對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);
}
java對于-128到127之間的數(shù),會進(jìn)行緩存,Integer i = 127時,會將127進(jìn)行緩存,下次再寫Integer j = 127時,就會直接從緩存中取,就不會new了。
以上所述是小編給大家介紹的Java中int和Integer的區(qū)別詳解整合,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
相關(guān)文章
Java實現(xiàn)InputStream的任意拷貝方式
這篇文章主要介紹了Java實現(xiàn)InputStream的任意拷貝方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-10-10
解析XML文件時的嵌套異常SAXParseException問題
這篇文章主要介紹了解析XML文件時的嵌套異常SAXParseException問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-04-04
SpringBoot 整合Redisson重寫cacheName支持多參數(shù)的案例代碼
這篇文章主要介紹了SpringBoot 整合Redisson重寫cacheName支持多參數(shù),本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友參考下吧2024-01-01
Spring使用@Filter注解創(chuàng)建自定義過濾器
Spring 中鮮為人知但非常有用的注解之一是 @Filter,它支持自定義過濾器,下面我們就來深入研究一下如何使用 Spring 的 @Filter 注解來創(chuàng)建自定義過濾器吧2023-11-11

