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

相关文章
相关标签/搜索