int與Integer區別及應用場景


背景:

今天述職,被大佬review了下代碼,問了個比較讓我懵逼又很基礎的問題,為什么我代碼中要用Integer而不是int。

一、int與Integer區別:

1、int屬於基本數據類型,Integer屬於int對應的包裝類。

2、既然是類,就需要實例化才可以使用,而基本數據變量不需要。

3、Integer的默認值是null,而int的默認值是0

二、int與Integer的應用場景

1、為什么java會保留基本數據類型?

對於java來說,常說“一切皆對象”,那為啥java還有基本數據類型,對此需要明白,基本數據類型和對象類型的區別

1、基本數據類型

基本數據類型存在的是:值,基本數據類型在內存中存放的位置是棧。(聲明在方法中的局部變量,基本類型作為成員變量,也存放在堆中)。

例如int a = 1 ;long a = 12L的形式定義的稱為自動變量,自動變量存放的是字面值,沒有類的存在。

2、對象類型

對象類型是對對象的引用,對象存放在堆中。

3、堆和棧的區別

那數據存放在堆中和棧中有什么區別呢?

棧:

1)棧的存取速度比堆快,僅次於直接位於CPU的寄存器。

2)棧中的數據的大小和生存周期是確定的。

3)棧中的數據可以共享。

堆:

1)堆可以動態的分配內存大小,生存期也不必告訴編譯器。

2)堆在運行時動態分配內存,存取速度慢。

 

綜上所述,可以簡單的理解為,為了高效,可以把一些數值小,簡單的變量存放在棧中。

2、有了基本數據類型為什么會出現Integer/包裝類?

將基本數據類型封裝成對象的好處是:

1、在對象中可以定義更多的功能方法操作該數據。例如:基本數據類型和字符串直接的轉換。

2、編碼過程中只接收對象的情況,例如List中只存入對象,不能存入基本數據類型;泛型不支持基本數據類型。

3、使用場景

大部分的情況下,這兩種類型沒有太大得區別。根據以上兩點的分析,基本類型的存取速度會更快,對象中有更多功能方法來操作數據,要根據實際需要定義屬性。

借鑒網上學生成績的例子,沒來考試,成績是0還是null,如果你覺得是0就用int,如果你認為是null,就用Integer。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2026 CODEPRJ.COM