问题如下:

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);
	}

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

相关文章: