面試官:小夥子你給我講一下Integer和int的區別?

前言

Integer和int 最本質的區別就是:Integer是封裝類,int是基本數據類型(這是廢話)。web

本文是但願能對Integer和int的區別進行更詳細的對比說明並加以舉例面試

Integer和int的區別

Integer的默認初始值是null,而int的初始值是int
也就是說Integer可以區分出未賦值和值爲0的區別,而int卻不能表達出未賦值的狀況,因此int不適合做爲web層的表單數據填寫。(例如:一個學生參加考試且成績爲0,和沒參加考試成績爲null)
Integer是類,自帶不少方法供使用,而int只能作一些基本的±*/=的操做
Integer變量必須先實例化,int變量直接使用算法

關於Integer

在說明Integer的時候有幾個小知識點提一下:spring

拆箱和裝箱數據庫

何時拆箱:基本數據類型和引用數據類型作運算時
何時裝箱:基本數據類型賦值給引用數據類型時
「==」和「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、分佈式緩存、數據結構等等。

相關文章
相關標籤/搜索