Integer的是int的包装类,int的初值为0,Ingeter的初值为null。我们先看一段代码:
public static void main(String[] args) {
Integer a1=1;
Integer a2=1;
Integer b1=200;
Integer b2=200;
Integer c1=new Integer(1);
Integer c2=new Integer(1);
Integer d1=new Integer(200);
Integer d2=new Integer(200);
System.out.println("a1==a2?"+(a1==a2));
System.out.println("b1==b2?"+(b1==b2));
System.out.println("c1==c2?"+(c1==c2));
System.out.println("d1==d2?"+(d1==d2));
}
运行结果:
a1==a2?true
b1==b2?false
c1==c2?false
d1==d2?false
为什么是这样的呢?我们一个一个解释。
先比较a和b两组,Integer初始化时,缓存Integer对象数据,这些Integer对象对应的int值为byte范围,即[-128,127]。当直接给Integer赋int值时,如果值得范围为[-128,127],Integer直接从缓存中取Integer对象,因此,当直接赋的int值处于[-128,127]时,Integer对象为相同的对象。
而通过new方式取的Integer对象,是直接从堆里面分配的对象,因此,不管具体的int值为多少,==判断的结果都是false

被折叠的 条评论
为什么被折叠?



