JAVA中Integer的==和equals注意

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

“==”比較:
“==”用來比較對象地址是否相同
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。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章