背景:
今天述職,被大佬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。
