Java Integer == 以及分析


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

以后遇到問題還是多看一下源碼比較好


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM