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

【Java每日一題】20161220:Integer 緩存機制導致 == 比較陷阱

     編輯:Java 綜合教學

【Java每日一題】20161220:Integer 緩存機制導致 == 比較陷阱

package Dec2016;
public class Ques1220 {
    public static void main(String[] args) {
        Integer num1 = new Integer(100);
        Integer num2 = new Integer(100);
        compare(num1, num2);
    }
    public static void compare(Integer a, Integer b){
        System.out.println(a == b);   // false
        System.out.println(a > b);    // false
        System.out.println(a < b);    // false
    }
}

輸出結果

false
false
false

解析

  1. new Integer(100) 每次都在堆上創建新對象,== 比較引用地址 → false。
  2. >、< 觸發自動拆箱為 int 基本類型比較數值,100 不大於/不小於 100 → 均為 false。

對比:直接賦值走緩存

Integer a = 100;  // 自動裝箱 -> Integer.valueOf(100)
Integer b = 100;
System.out.println(a == b); // true (-128~127 緩存範圍內)
Integer c = 200;
Integer d = 200;
System.out.println(c == d); // false (超出緩存範圍)

最佳實踐

  • 包裝類比較數值務必用 .equals()
  • 避免 new Integer(),優先用 Integer.valueOf() 或直接賦值
  • 基本類型 int 無此問題,性能更好

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