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