簡單了解java中int和Integer的區(qū)別
這篇文章主要介紹了簡單了解java中int和Integer的區(qū)別,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
1、Integer是int的包裝類,int則是java的一種基本數(shù)據(jù)類型
2、Integer變量必須實例化(new 一下是最常見的實例化)后才能使用,而int變量不需要
3、Integer實際是對象的引用,new Integer(),實際上是生成一個指針指向此對象;而int則是直接存儲數(shù)據(jù)值
4、Integer的默認值是null,int的默認值是0
注意
Integer對象會占用更多的內(nèi)存。Integer是一個對象,需要存儲對象的元數(shù)據(jù)。但是int是一個原始類型的數(shù)據(jù),所以占用的空間更少
關(guān)于Integer和int的比較
1. 兩個new實例化出來的Integer變量比較,結(jié)果為false.
/** * @author tracydzf *比較兩個new出來的Integer * */ public class Test { public static void main(String[] args) { Integer a = new Integer(100); Integer b = new Integer(100); System.out.println(a==b); //輸出false } }
當new一個Integer時,實際上是生成一個指針,指向此對象,兩次new Integer生成的是兩個對象,對象儲存在堆當中,其內(nèi)存地址不同,所以兩個new出來的Integer變量不等。
2.int 和Integer在進行比較的時候,Integer會進行拆箱,轉(zhuǎn)為int值與int進行比較
/** * @author tracydzf *int 和 Integer的比較 * */ public class Test { public static void main(String[] args) { Integer a = new Integer(100); int b = 100; System.out.print(a == b); //true } }
3.非new生成的Integer變量和new Integer()生成的變量比較時,結(jié)果為false。(因為非new生成的Integer變量指向的是java常量池中的對象,而new Integer()生成的變量指向堆中新建的對象,兩者在內(nèi)存中的地址不同)
/** * @author tracydzf * Integer 和 new Integer的比較 * */ public class Test { public static void main(String[] args) { Integer a = new Integer(100); Integer b = 100; System.out.print(a == b); //false } }
4.對于兩個非new生成的Integer對象,進行比較時.
注意:
① 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); }
② 當自動裝箱后生成的Integer的對象,其值 -128<= x <= 127 時,這個對象會直接取緩存IntegerCache中的對應的對象,生成的當然也是個對象。
我們來看看例子
這里a跟b都是128,不會再IntegerCache取緩存對象,所以是false.
/** * @author tracydzf * Integer 和 Integer的比較 * */ public class Test { public static void main(String[] args) { Integer a = 128; Integer b = 128; System.out.print(a == b); //false } }
a,b都是127,數(shù)值相等,且滿足在IntegerCache取緩存的條件,所以對象相等.
/** * @author tracydzf * Integer 和 Integer的比較 * */ public class Test { public static void main(String[] args) { Integer a = 127; Integer b = 127; System.out.print(a == b); //true } }
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Java?Bluetooth?藍牙通訊?BlueCove?掃描附近的藍牙設備(測試代碼)
BlueCove是一個開源的藍牙協(xié)議棧實現(xiàn),旨在為Java開發(fā)者提供一個全面的、易于使用的API,從而在應用程序中實現(xiàn)藍牙功能,該項目支持多種操作系統(tǒng),這篇文章主要介紹了Java?Bluetooth?藍牙通訊?BlueCove?掃描附近的藍牙設備,需要的朋友可以參考下2025-01-01Idea中SpringBoot多模塊項目的建立實現(xiàn)
這篇文章主要介紹了Idea中SpringBoot多模塊項目的建立實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-06-06springboot中實現(xiàn)上傳文件的功能簡單示例
這篇文章主要給大家介紹了關(guān)于springboot中實現(xiàn)上傳文件功能的相關(guān)資料,在Spring Boot中實現(xiàn)文件上傳下載功能相對簡單,文中給出了代碼示例,需要的朋友可以參考下2023-09-09Springboot項目因為kackson版本問題啟動報錯解決方案
這篇文章主要介紹了Springboot項目因為kackson版本問題啟動報錯解決方案,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-07-07Java中遍歷ConcurrentHashMap的四種方式詳解
這篇文章主要介紹了Java中遍歷ConcurrentHashMap的四種方式詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2019-10-10