结论:使用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关键字去实例化一个新的对象。