Integer a = 1;
Integer b = 1;
Integer c = 500;
Integer d = 500;
System.out.println(a == b);
System.out.println(c == d);
Integer aa=new Integer(10);
Integer bb=new Integer(10);
int cc=10;
System.out.println(aa == bb);
System.out.println(aa == cc);
答案是
true
false
false
true
Integer a = 1;是自動裝箱會調用Interger.valueOf(int)方法;該方法注釋如下:
This method will always *** values in the range -128 to 127 inclusive, and may *** other values outside of this range.
也就是說IntegerCache類緩存了-128到127的Integer實例,在這個區間內調用valueOf不會創建新的實例。
Integer類型在-128-->127范圍之間是被緩存了的,也就是每個對象的內存地址是相同的,賦值就直接從緩存中取,不會有新的對象產生,而大於這個范圍,將會重新創建一個Integer對象,也就是new一個對象出來,當然地址就不同了,也就!=;
一、包裝類和基本數據類型在進行“==”比較時,包裝類會自動拆箱成基本數據類型,integer(0)會自動拆箱,結果為true
二、兩個integer在進行“==”比較時,如果值在-128和127之間,結果為true,否則為false
三、兩個包裝類在進行“equals”比較時,首先會用equals方法判斷其類型,如果類型相同,再繼續比較值,如果值也相同,則結果為true
四、基本數據類型如果調用“equals”方法,但是其參數是基本類型,此時此刻,會自動裝箱為包裝類型