JAVA中Integer的==和equals注意

「equals」比較:
equals(Object obj)方法,在equals(Object obj)方法中,會先判斷參數中的對象obj是不是Integer類型的對象,若是是則判斷值是否相同,值相同則返回true,值不一樣則返回false,若是obj不是Integer類的對象,則返回false。
須要注意的是:當參數是基本類型int時,編譯器會給int自動裝箱成Integer類,而後再進行比較。java

「==」比較:
「==」用來比較對象地址是否相同
IntegerCache 緩存:
JAVA的Integer有IntegerCache會緩存-128~127之間的對象。
如:Integer x = 100,會調用Integer的valueOf()方法,這個方法就是返回一個Integer對象,可是在返回前,做了一個判斷,判斷要賦給對象的值是否在[-128,127]區間中,且IntegerCache(是Integer類的內部類,裏面有一個Integer對象數組,用於存放已經存在的且範圍在[-128,127]中的對象)中是否存在此對象,若是存在,則直接返回引用,不然,建立一個新對象返回。 數組

Integer i02 = 59;
Integer i03 = Integer.valueOf(59);
Integer i04 = new Integer(59);
    
System.out.println(i02 == i03);  //true 由於59位於緩存區間直接從緩存中獲取
System.out.println(i02 == i04);  //false
System.out.println(i03 == i04);  //false

 

Integer i02 = 200;
Integer i03 = Integer.valueOf(200);
Integer i04 = new Integer(200);
        
System.out.println(i02 == i03);  //false 由於200超出緩存區間重新建立對象
System.out.println(i02 == i04);  //false
System.out.println(i03 == i04);  //false

 

 因此在通常狀況下,建議用int,除非特殊須要要賦null值才使用包裝類Integer。緩存

相關文章
相關標籤/搜索