描述: Integer对象在-128~127之间的==比较,以及该范围之外的比较情况;
运行代码:
public class Test {
public static void main(String[] args) {
Integer a = 5, b = 5, c = 132, d = 132;
System.out.println(a == b);
System.out.println(c == d);
}
}
结果打印:
a与b用==比较,结果为true;
c与d用==比较,结果为false;
源码分析:
明显能看出大致意思是i的值若在low与high的区间内,那就走缓存cache,否则直接new在堆上;
由此,让我们看看low和high分配的有多大;
源码中可见,low为-128,high为127;
其中有一行注释high value may be configured by property
表明high的值是可以通过属性配置的;
总结:
有一个静态数组中存放了-128~127之间的所有Integer对象,如果调用valueOf 方法,值是在-128 到 127 之间就直接在cache中去取Integer对象,所以a、b是同一个对象,返回true;
如果不在这个区间,那就直接new一个对象出来,因此尽管c、d的值相同,但是二者是两个独立对象,因此不同,返回false;