首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

Java Integer 與 int 比較全解析:自動拆箱、快取機制與最佳實踐

     編輯:Java 綜合教學

基本類型與包裝類的核心差異

int 是 Java 基本資料類型,佔 4 位元組,預設值 0,直接儲存數值;Integer 是其包裝類,繼承自 Number,為物件類型,儲存記憶體堆中物件的引用,預設值 null。兩者透過自動拆箱裝箱機制互相轉換,但比較行為截然不同。

== 比較運算子的陷阱

圖示揭示核心規則:

  • 基本類型 int:== 比較數值本身
  • Integer 物件:== 比較記憶體位址(引用)
  • 混合比較:Integer 自動拆箱為 int,進行數值比較

Integer 快取機制深度解析

Java 編譯器對 -128 ~ 127 範圍的整數進行快取優化:

Integer a = 100;  // 使用快取物件
Integer b = 100;
a == b  // true,同一快取物件

Integer c = 200;  // 新建物件
Integer d = 200;
c == d  // false,不同記憶體位址

此機制源自 IntegerCache 靜態內部類,可透過 -XX:AutoBoxCacheMax JVM 參數調整上限。

正確比較策略與最佳實踐

1. 數值比較:統一使用 equals()

Integer x = 200, y = 200;
x.equals(y)  // true,比較數值內容

2. 避免空指針:Objects.equals() 或 三元運算

Objects.equals(a, b)  // null 安全
a != null && a.equals(b)  // 傳統寫法

3. 基本類型優先:減少拆箱開銷

高效能場景優先使用 int,僅在集合、泛型、需表達「無值」時使用 Integer。

常見面試題與避坑指南

表達式結果原因
new Integer(100) == new Integer(100)false新建兩個不同物件
Integer.valueOf(100) == 100true自動拆箱比較數值
Integer.valueOf(1000) == Integer.valueOf(1000)false超出快取範圍,新建物件

掌握拆箱裝箱規則與快取邊界,是寫出正確、高效 Java 代碼的關鍵。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved