Java int和Integer區別(基於Integer源碼探索)

Java int和Integer區別

1、Java int類型

int是Java基礎數據類型
int數據類型是32位,有符號的以二進制補碼錶示的整數
一般的整型變量默認爲int類型
int類型默認值爲0
int型範圍:-231~231 - 1

2、Java Integer類

Integer實際上是一個類,它是基本數據類型int的包裝類
在我們寫的類中加入Integer類型的數據,然後查看Integer的實現。可以發現他是一個繼承自Number的類,其中定義了諸多方法,有興趣可以自己研究下。
在這裏插入圖片描述
以下是Integer的兩個構造函數,可以發現它既可以通過int類型數據來構造Integer類對象,也可以通過String類型的數據來構造對象。
在這裏插入圖片描述

3、int和Integer比較

1、int是基本數據類型,而Integer是類對象,是對基本數據類型的封裝。其中包含了自動裝箱和自動拆箱
java數據類型有基本數據類型和引用數據類型,爲了方便將基本數據類型當作對象處理,java引入了基本數據類型相對應的封裝類
自動裝箱:自動裝箱其實就是將基本數據類型轉換爲引用數據類型(對象)
自動拆箱:自動拆箱其實就是將引用數據類型轉化爲基本數據類型

2、int類型直接存儲數值,Integer需要實例化對象,指向對象的地址。也就是說Integer變量必須實例化後才能使用,而int變量不需要
3、由於Interger是一個對象,所以在比較過程中也有稍有區別。下面我們通過一段代碼來進行比較

	public static void main(String[] args){
        int i = 0;
        int j = 0;
        System.out.print("i == j " + (i == j ? "true":"false"));
        System.out.print("\n");
        Integer a = 0;
        System.out.print("i == a " + (i == a ? "true":"false"));
        System.out.print("\n");
        Integer b = 0;
        System.out.print("a == b " + (a == b ? "true":"false"));
        System.out.print("\n");
        Integer c = 350;
        Integer d = 350;
        System.out.print("c == d " + (c == d ? "true":"false"));
        System.out.print("\n");
        Integer e = new Integer(250);
        Integer f = new Integer(250);
        System.out.print("e == f " + (e == f ? "true":"false"));
        System.out.print("\n");
        int g = 250;
        System.out.print("g == f " + (g == f ? "true":"false"));
        System.out.print("\n");
    }

代碼運行結果
在這裏插入圖片描述
從中我們可以得出以下結論
(1)兩個int類型數據數值相等則其相等,如i == j;
(2)int類型數據和Integer類型數據如果其值相等則兩者相等,如i == a, Integer會自動拆箱,然後通過數值進行比較
(3)兩個Integer類型對象進行比較,我們可以發現當其都爲0時,兩者相等,但當其都爲350時,兩者不相等。(如a == b和c == d)原因如下:
當Integer類型數據對象處於以下範圍:-128~127;Integer會自動對其進行緩存,不會在new一個新的對象,故此時兩者相等,但超出這個範圍的時候,Integer會自動new一個新的對象,此時兩者不相等。
在這裏插入圖片描述
(4)當我們使用new來生成兩個Integer對象時,即使其數值相等,它們也不會相等,因爲這是兩個不同的對象。(如e == f)
*

4、結論

  • 如果都是基本數據類型,則兩者相等
  • 如果都是new出來的,那麼兩個是不同的對象,故兩者不相等
  • 如果數值大小在-128~127之間,不進行new操作,則兩者相等
  • 如果是基本數據類型int和封裝的對象Integer數值相等則其相等,如果數值不等,那麼他們就不相等,封裝對象會有一個自動拆箱來進行比較
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章