Integer和int的區別實例詳解
Integer和int最本質的區別就是:Integer是封裝類,int是基本數據類型(這是廢話)。
本文是希望能對Integer和int的區別進行更詳細的對比說明並加以舉例
Integer和int的區別
- Integer的默認初始值是null,而int的初始值是int,也就是說Integer能夠區分出未賦值和值為0的區別,而int卻不能表達出未賦值的情況,所以int不適合作為web層的表單數據填寫。(例如:一個學生參加考試且成績為0,和沒參加考試成績為null)
- Integer是類,自帶很多方法供使用,而int隻能做一些基本的±*/=的操作
- Integer變量必須先實例化,int變量直接使用
關於Integer
在說明Integer的時候有幾個小知識點提一下:
- 拆箱和裝箱
- 什麼時候拆箱:基本數據類型和引用數據類型做運算時什麼時候裝箱:基本數據類型賦值給引用數據類型時
- “==”和“equals()”
- “==”:在比較基本數據類型時比較的是數值,比較引用數據類型時比較的是對象堆內存地址equals():在Object類中是通過“==”來比較的,但大多時候,我們會將其進行重寫
- 在Integer類中,“==”用來比較對象地址是否相同,而equals()被重寫,他會先判斷參數中對象是否為Integer類型,如果是則判斷值是否相同。
public boolean equals(Object obj) { if (obj instanceof Integer) { return value == ((Integer)obj).intValue(); } return false; }
幾點說明
- Integer變量和int變量比較值時,隻要值是相等的,結果就為true(因為Java會自動拆箱,將Integer拆為int,在進行比較)
Integer a = new Integer(1); int b = 1; System.out.println(a == b);//true
兩個通過new生成的Integer變量是永遠不相等的(因為new生成的是兩個新對象,內存地址不同)
Integer a = new Integer(1); Integer b = new Integer(1); System.out.println(a == b);//false
兩個通過非new產生的Integer變量也是不相等的(因為非new產生的Integer變量指向Java常量池中的對象,而new產生的變量指向堆中新建對象,他倆所在的內存地址不同)
Integer a = new Integer(1); Integer b = 1; System.out.println(a == b);//false
兩個非new產生的Integer變量比較:當值在-128~127之間時,結果為true,當值在此區間外結果為false(因為Integer常量池的存儲范圍是[-128,127],在此范圍內是直接存儲於常量池的,都指向同一個地址。在此范圍外的數需要通過堆內存創建一個新對象。比如Integer a=1會將1寫入緩存中,下次再寫Integer b=1時會直接從緩存中去,不用new瞭,所以取到的地址也是相同的)
Integer a = 1; Integer b = 1; System.out.println(a == b);//true Integer a = 129; Integer b = 129; System.out.println(a == b);//false
到此這篇關於Integer和int的區別實例詳解的文章就介紹到這瞭,更多相關Integer和int的區別內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- Java Object類和包裝類深入解讀
- 基於Integer值判斷是否相等的問題
- Java中如何正確重寫equals方法
- java兩個integer數據判斷相等用==還是equals
- 詳談java中int和Integer的區別及自動裝箱和自動拆箱