天天看點

面試官:小夥子你給我講一下Integer和int的差別?前言Integer和int的差別關于Integer幾點說明最後

前言

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産生的變量和一個非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

           

最後

歡迎關注公衆号:前程有光,領取一線大廠Java面試題總結+各知識點學習思維導+一份300頁pdf文檔的Java核心知識點總結! 這些資料的内容都是面試時面試官必問的知識點,篇章包括了很多知識點,其中包括了有基礎知識、Java集合、JVM、多線程并發、spring原理、微服務、Netty 與RPC 、Kafka、日記、設計模式、Java算法、資料庫、Zookeeper、分布式緩存、資料結構等等。