面試官:int和Integer有什麼區別?爲什麼要有包裝類?

重要說明:本篇爲博主《面試題精選-基礎篇》系列中的一篇,查看系列面試文章請關注我
Gitee 開源地址:https://gitee.com/mydb/interview

Java 是一種強數據類型的語言,因此所有的屬性必須有一個數據類型。就像麥德龍超市一樣,想要進去購物,先要有一個會員卡纔行(刷卡入內)。

PS:Java 10 有了局部變量類型推導,可以使用 var 來替代某個具體的數據類型,但在字節碼階段,Java 的變量仍有着明確的數據類型,且局部變量類型推導有着很多限制和不完善之處,也不是目前主流的應用版本,所以這裏不做深入討論。

回到主題,要理解 int 和 Integer 的區別,要先從 Java 的基礎數據類型說起。

基本數據類型

在 Java 中,一共有 8 種基本類型(primitive type),其中有 4 種整型、2 種浮點類型、1 種用於表示 Unicode 編碼的字符類型 char 和 1 種用於表示真假值的 boolean 類型。

  • 4 種整型:int、short、long、byte
  • 2 種浮點類型:float、double
  • 字符類型:char
  • 真假類型:boolean

基本數據類型是指不可再分的原子數據類型,內存中直接存儲此類型的值,通過內存地址即可直接訪問到數據,並且此內存區域只能存放這種類型的值,int 就是 Java 中一種常用的基礎數據類型

包裝類及其作用

因爲 Java 的設計理念是一切皆是對象,在很多情況下,需要以對象的形式操作,比如 hashCode() 獲取哈希值,或者 getClass() 獲取類等。

包裝類的作用

在 Java 中每個基本數據類型都對應了一個包裝類,而 int 對應的包裝類就是 Integer包裝類的存在解決了基本數據類型無法做到的事情泛型類型參數、序列化、類型轉換、高頻區間數據緩存等問題

基礎類型 包裝類型
int Integer
short Short
byte Byte
long Long
float Float
double Double
char Character
boolean Boolean

int 和 Integer 的區別

int 和 Integer的區別主要體現在以下幾個方面:

  1. 數據類型不同:int 是基礎數據類型,而 Integer 是包裝數據類型;
  2. 默認值不同:int 的默認值是 0,而 Integer 的默認值是 null;
  3. 內存中存儲的方式不同:int 在內存中直接存儲的是數據值,而 Integer 實際存儲的是對象引用,當 new 一個 Integer 時實際上是生成一個指針指向此對象;
  4. 實例化方式不同:Integer 必須實例化纔可以使用,而 int 不需要;
  5. 變量的比較方式不同:int 可以使用 == 來對比兩個變量是否相等,而 Integer 一定要使用 equals 來比較兩個變量是否相等。

總結

Integer 是 int 的包裝類,它們的區別主要體現在 5 個方面:數據類型不同、默認值不同、內存中存儲的方式不同、實例化方式不同以及變量的比較方式不同。包裝類的存在解決了基本數據類型無法做到的事情泛型類型參數、序列化、類型轉換、高頻區間數據緩存等問題。

參考 & 鳴謝

《碼出高效:Java開發手冊》

關注公衆號:Java面試真題解析,查看更多 Java 面試題。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章