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

【Java每日一題】Integer 物件比較:new 與 valueOf 的差異解析

     編輯:Java 綜合教學

【Java每日一題】Integer 物件比較:new 與 valueOf 的差異解析

這道經典的 Java 面試題考察的是 Integer 物件建立方式對比較結果的影響。程式碼分別使用 new Integer(num) 和 Integer.valueOf(num) 建立兩個物件,並透過 == 比較參考位址。

核心概念:Integer 快取機制

Integer.valueOf() 方法內部會對 -128 到 127 之間的整數進行快取。當數值落在這個範圍時,會直接返回快取池中已存在的物件參考;超出範圍則會建立新物件。而 new Integer() 每次都會在堆記憶體中分配新的物件空間。

執行結果分析

當 num = 127 時:

new產生的對象:false
valueOf產生的對象:true

new 建立兩個不同物件,參考不同,故為 false。valueOf 因 127 在快取範圍內,返回同一個快取物件,參考相同,故為 true。

當 num = 128 時:

new產生的對象:false
valueOf產生的對象:false

128 超出快取範圍,valueOf 也會建立新物件,因此兩次呼叫返回不同參考,結果同樣為 false。

最佳實務建議

  • 優先使用 Integer.valueOf() 或自動裝箱 Integer n = 127;,效能較佳且記憶體友善。
  • 比較 Integer 數值時,務必使用 .equals() 而非 ==,避免快取範圍邊界導致的邏輯錯誤。
  • 理解快取範圍(-128~127)可透過 JVM 參數 -XX:AutoBoxCacheMax 調整。

這道題目生動展示了 Java 基礎型別包裝類的記憶體管理細節,是面試與日常開發中必須掌握的核心知識點。

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