Integer a= 127,Integer b = 127;Integer c= 128,Integer d = 128;,相等吗?

Integer a= 127,Integer b = 127;Integer c= 128,Integer d = 128;,相等吗?
答案是 a 和 b 相等,c 和 d 不相等。
- 对于基本数据类型的比较,使用 == 比较的是它们的值。
- 对于引用数据类型的比较,使用 == 比较的是它们的地址。
在给 Integer 赋值时,如果赋值的整数在范围 -128 到 127 之间,会使用 Integer 缓存池中的对象,否则会创建新的 Integer 对象。
public static void main(String[] args) {
Integer a = 127;
Integer b = 127;
Integer b1 = new Integer(127);
System.out.println(a == b); //true
System.out.println(b==b1); //false
Integer c = 128;
Integer d = 128;
System.out.println(c == d); //false
}
什么是 Integer 缓存?
因为根据实践发现大部分的数据操作都集中在值比较小的范围,因此 Integer 搞了个缓存池,默认范围是 -128 到 127,可以根据通过设置JVM-XX:AutoBoxCacheMax=
来修改缓存的最大值,最小值改不了。
实现的原理是 int 在自动装箱的时候会调用 Integer.valueOf,进而用到了 IntegerCache。
很简单,就是判断下值是否在缓存范围之内,如果是的话去 IntegerCache 中取,不是的话就创建一个新的 Integer 对象。
IntegerCache 是一个静态内部类, 在静态块中会初始化好缓存值。
private static class IntegerCache {
……
static {
//创建Integer对象存储
for(int k = 0; k < cache.length; k++)
cache[k] = new Integer(j++);
……
}
}