天天看點

面試官: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 是包裝資料類型;

預設值不同:int 的預設值是 0,而 Integer 的預設值是 null;

記憶體中存儲的方式不同:int 在記憶體中直接存儲的是資料值,而 Integer 實際存儲的是對象引用,當 new 一個 Integer 時實際上是生成一個指針指向此對象;

執行個體化方式不同:Integer 必須執行個體化才可以使用,而 int 不需要;

變量的比較方式不同:int 可以使用 == 來對比兩個變量是否相等,而 Integer 一定要使用 equals 來比較兩個變量是否相等。

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

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

關注公衆号:Java面試真題解析,檢視更多 Java 面試題。

關注下面二維碼,訂閱更多精彩内容。

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

關注公衆号(加好友):

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

作者:

王磊的部落格

出處:

http://vipstone.cnblogs.com/