Java Integer ==
先看一下這段代碼
Integer integer1 = 100;
Integer integer2 = 100;
System.out.println("integer1 == integer2:"+(integer1==integer2));
Integer integer3 = 1000;
Integer integer4 = 1000;
System.out.println("integer1 == integer2:"+(integer3==integer4));
輸出結果:
很久之前就知道這里有個坑,今天看到別人分析了一下Integer.java的源代碼才知道具體是為什么
Integer.java
可以看出來使用Integer.valueOf(i)
的時候並不會立即new一個Integer對象,而是先判斷是否在緩存數組里面
不知道稱作
緩存
是不是不太合適
IntegerCache
是一個嵌套類(靜態內部類)
在靜態初始化塊中完成的初始化,在這里確定的范圍是-128~127
包裝器獲取的時候會調用 Integer.valueOf(i)
Java核心技術里面有提到,之前一直也沒注意
所以直接new 創建一個Integer 使用==比較還是會false
Integer integer = new Integer(100);
System.out.println("integer1 == integer2:"+(integer1==integer));
integer1 == integer2:false
為了以后避免這種坑,還是使用 equals比較好
當然,要判斷 == null
以后遇到問題還是多看一下源碼比較好