首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

Java Integer 緩存機制:-128~127 直接比較為 true,超出範圍為 false

     編輯:程式設計疑難解答

代碼現象

Integer num1 = Integer.parseInt("123");
Integer num2 = 123;
System.out.println(num1 == num2); // true

Integer num3 = Integer.parseInt("456");
Integer num4 = 456;
System.out.println(num3 == num4); // false

原理解析

  • == 比較的是引用地址,非數值。
  • Java 編譯器將字面量 123 自動裝箱為 Integer.valueOf(123),該方法緩存 -128 到 127 的實例,同值返回同一對象。
  • parseInt 返回新對象(不走緩存),但 123 在緩存範圍內,valueOf 返回緩存對象,兩者恰好指向同一對象 → true。
  • 456 超出緩存範圍,valueOf 創建新對象,與 parseInt 返回的新對象地址不同 → false。

最佳實踐

比較 Integer 數值請用 .equals() 或拆箱為 int 再用 ==。

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