问题如下:
public void test2() {
Integer a = 1;
Integer b = 1;
System.out.println(a==b);
Integer c = 128;
Integer d = 128;
System.out.println(c==d);
}
运行结果如下
为什么值为1时,打印为true,值为128时为false呢?
我们来看一下Integer的源码,发现valueof注解上说范围在-128到127之间,总是在缓存中取值:
但不在这个范围内该怎么办呢?我们不妨看一下Integer中IntegerCache这个内部类:
总结:当定义Integer的数值在-128-127之间,仅创建一个对象,并将值存入缓存中,再次定义相同的数值时,就直接拿来用,不会创建新的Integer对象,两者为true,但超过这个范围,不会存入缓存,不管第几次都会创建一个对象,所以==比较对象地址值肯定为false。