结论:使用equals判断
public class Test { public static void main(String[] args) { Integer a=new Integer(1); Integer b=new Integer(1); System.out.print("缓存范围内,两个对象引用,直接使用==判断:"); System.out.println(a==b);System.out.println("--------------"); System.out.print("缓存范围内,两个对象引用,使用equals判断:"); System.out.println(a.equals(b)); System.out.println("--------------"); Integer c=1; Integer d=1; System.out.print("在默认缓存范围-127-128内直接使用==判断:"); System.out.println(c==d);System.out.println("--------------"); Integer e=128; Integer f=128; System.out.print("超出缓存,128直接使用==判断:"); System.out.println(e==f);System.out.println("--------------"); System.out.println("超出缓存,128使用equals判断:"+e.equals(f)); } }
结果:
原因:Integer类对于在[-128, 127]内的值做了缓存。在我们使用第二第三种方式赋值时,会调用Integer中的valueOf(int i)这个方法,该方法会判断该值是否在缓存区间内,如果不在区间内才会使用new关键字去实例化一个新的对象。