“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。