Java基礎-基本型別和包裝型別

瑞莫蒂發表於2024-07-18

基本型別

Java有八種基本型別

  • int
  • float
  • double
  • long
  • boolean
  • char
  • short
  • byte
    基本型別如果是區域性變數,那它們的位置會在虛擬機器棧種。如果是成員變數它們會存放在堆中。

包裝型別

相對應的Java也有八種包裝型別

  • Int
  • Float
  • Double
  • Long
  • Boolean
  • Char
  • Short
  • Byte

區別

1.預設值:基本型別都各自有自己的預設值,包裝型別的預設值是null
2.使用:除了定義一些常量和區域性變數之外,在方法引數、物件屬性中很少會使用基本型別來定義變數。
而且包裝型別可用於泛型,而基本型別不可以。(比如int的預設值是0,Integer的預設值是null,null對於程式來說比較好處理,可以進行空值判斷,而且資料庫中欄位值可能為null,這個時候int會報錯,而Integer不會)
3.比較方式:基本型別直接都用==比較,而包裝型別用equals()來比較。
4.儲存位置:幾乎所有物件都存放在堆上,不說全部是因為HotSpot 虛擬機器引入了 JIT 最佳化之後,會對物件進行逃逸分析,如果發現某一個物件並沒有逃逸到方法外部,那麼就可能透過標量替換來實現棧上分配,而避免堆上分配記憶體。

自動拆裝箱

Integer a = 1; //此時發生了裝箱,呼叫了Integer.valueOf(1)方法,每個包裝型別都有其valueOf()方法。
int b = a; //此時發生了拆箱,呼叫了a.intValue()方法,每個包裝型別都有其拆箱方法。

快取機制

Java 基本資料型別的包裝型別的大部分都用到了快取機制來提升效能。Byte,Short,Integer,Long 這 4 種包裝類預設建立了數值 [-128,127] 的相應型別的快取資料,Character 建立了數值在 [0,127] 範圍的快取資料,Boolean 直接返回 True or False。

Integer a=40; //裝箱,Integer.valueOf(40),實際使用了Integer快取。
Integer b = new Integer(40);//實際建立了一個新的物件

相關文章