面试官:int和Integer有什么区别?为什么要有包装类?
作者 |?磊哥
來源 | Java面試真題解析(ID:aimianshi666)
轉(zhuǎn)載請(qǐng)聯(lián)系授權(quán)(微信ID:GG_Stone)
重要說明:本篇為博主《面試題精選-基礎(chǔ)篇》系列中的一篇,查看系列面試文章請(qǐng)關(guān)注我。Gitee 開源地址:https://gitee.com/mydb/interview
Java 是一種強(qiáng)數(shù)據(jù)類型的語言,因此所有的屬性必須有一個(gè)數(shù)據(jù)類型。就像麥德龍超市一樣,想要進(jìn)去購物,先要有一個(gè)會(huì)員卡才行(刷卡入內(nèi))。
PS:Java 10 有了局部變量類型推導(dǎo),可以使用 var 來替代某個(gè)具體的數(shù)據(jù)類型,但在字節(jié)碼階段,Java 的變量仍有著明確的數(shù)據(jù)類型,且局部變量類型推導(dǎo)有著很多限制和不完善之處,也不是目前主流的應(yīng)用版本,所以這里不做深入討論。
回到主題,要理解 int 和 Integer 的區(qū)別,要先從 Java 的基礎(chǔ)數(shù)據(jù)類型說起。
基本數(shù)據(jù)類型
在 Java 中,一共有 8 種基本類型(primitive type),其中有 4 種整型、2 種浮點(diǎn)類型、1 種用于表示 Unicode 編碼的字符類型 char 和 1 種用于表示真假值的 boolean 類型。
4 種整型:int、short、long、byte
2 種浮點(diǎn)類型:float、double
字符類型:char
真假類型:boolean
基本數(shù)據(jù)類型是指不可再分的原子數(shù)據(jù)類型,內(nèi)存中直接存儲(chǔ)此類型的值,通過內(nèi)存地址即可直接訪問到數(shù)據(jù),并且此內(nèi)存區(qū)域只能存放這種類型的值,int 就是 Java 中一種常用的基礎(chǔ)數(shù)據(jù)類型。
包裝類及其作用
因?yàn)?Java 的設(shè)計(jì)理念是一切皆是對(duì)象,在很多情況下,需要以對(duì)象的形式操作,比如 hashCode() 獲取哈希值,或者 getClass() 獲取類等。
包裝類的作用
在 Java 中每個(gè)基本數(shù)據(jù)類型都對(duì)應(yīng)了一個(gè)包裝類,而 int 對(duì)應(yīng)的包裝類就是 Integer,包裝類的存在解決了基本數(shù)據(jù)類型無法做到的事情泛型類型參數(shù)、序列化、類型轉(zhuǎn)換、高頻區(qū)間數(shù)據(jù)緩存等問題。
| int | Integer |
| short | Short |
| byte | Byte |
| long | Long |
| float | Float |
| double | Double |
| char | Character |
| boolean | Boolean |
int 和 Integer 的區(qū)別
int 和 Integer的區(qū)別主要體現(xiàn)在以下幾個(gè)方面:
數(shù)據(jù)類型不同:int 是基礎(chǔ)數(shù)據(jù)類型,而 Integer 是包裝數(shù)據(jù)類型;
默認(rèn)值不同:int 的默認(rèn)值是 0,而 Integer 的默認(rèn)值是 null;
內(nèi)存中存儲(chǔ)的方式不同:int 在內(nèi)存中直接存儲(chǔ)的是數(shù)據(jù)值,而 Integer 實(shí)際存儲(chǔ)的是對(duì)象引用,當(dāng) new 一個(gè) Integer 時(shí)實(shí)際上是生成一個(gè)指針指向此對(duì)象;
實(shí)例化方式不同:Integer 必須實(shí)例化才可以使用,而 int 不需要;
變量的比較方式不同:int 可以使用 == 來對(duì)比兩個(gè)變量是否相等,而 Integer 一定要使用 equals 來比較兩個(gè)變量是否相等。
總結(jié)
Integer 是 int 的包裝類,它們的區(qū)別主要體現(xiàn)在 5 個(gè)方面:數(shù)據(jù)類型不同、默認(rèn)值不同、內(nèi)存中存儲(chǔ)的方式不同、實(shí)例化方式不同以及變量的比較方式不同。包裝類的存在解決了基本數(shù)據(jù)類型無法做到的事情泛型類型參數(shù)、序列化、類型轉(zhuǎn)換、高頻區(qū)間數(shù)據(jù)緩存等問題。
參考 & 鳴謝
《碼出高效:Java開發(fā)手冊》
關(guān)注公眾號(hào):Java面試真題解析,查看更多 Java 面試題。
總結(jié)
以上是生活随笔為你收集整理的面试官:int和Integer有什么区别?为什么要有包装类?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: c struct 对齐_C中的struc
- 下一篇: Java RandomAccessFil