在 java 中使用 Integer 装箱的方式定义变量后通过 == 进行比较,我们知道使用==比较的是引用地址。
代码段:
Integer a = -128;
Integer b = -128;
Integer c = 127;
Integer d = 127;
Integer e = 128;
Integer f = 128;
a == b ,c == d , e == f
运行结果为:
true
true
false
上述代码结果貌似只在一个区间内我们的满足猜想,进入到 Integer 类中,能看到这样的描述:
大概就是说-127 ~ 128范围内的数值会被频繁使用,为了提高性能,避免每次都要进行创建和销毁而造成的开销,将这个范围内的所有值都存储在缓存中,需要的时候直接从缓存中获取,所以上述代码中ab和cd的比较,其实都是相同的引用进行比较,而ef的比较,已经超出了缓存数据的范围,所以e和f其实是创新创建了两个Integer对象,引用不同结果自然为false了。
注:如果使用Integer的equal方法比较的话,他们是比较值,结果都是true