【JAVA】詳解在JAVA中int與Integer的區別以及背後的原因。

區別

首先我們要明確,這兩點之間有什麼區別?

主要有以下幾點:

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

接下來,我們要詳細解釋一下和為基礎數據類型?

基本數據類型

在JAVA中,主要有八種基本數據類型:

1、 整型:byte、short、int、long

2、 字元型:char

3、 浮點型:float、double

4、 布爾型:boolean
基本數據類型是指不可再分的原子數據類型,記憶體中直接存儲此類型的值,通過記憶體地址即可直接訪問到數據,並且此記憶體區域只能存放這種類型的值。
對於涉及到這些數據類型的運算,JAVA會對其進行自動類型轉換。其實我們在寫程式碼的時候經常使用到,比如 short a = 1; int b = a;

而本文中將到的int就是基本數據類型的一種。而Integer是包裝數據類型。

包裝數據類型

因為 Java的設計理念是一切皆是對象,在很多情況下,需要以對象的形式操作,比如 hashCode()獲取哈希值,或者 getClass()獲取類、toString()轉為字元串等等。在這種情況下,基本數據類型並不符合我們JAVA一切皆為對象的思想,因此我們引入了包裝數據類型。
在Java中每個基本數據類型都對應了一個包裝類,而 int對應的包裝類就是 Integer,包裝類的存在解決了基本數據類型無法做到的事情泛型類型參數、序列化、類型轉換、高頻區間數據快取等問題。

image

Tags: